以下是给定的内容:
为了方便起见,这里是代码本身(我不确定我的链接是否有效):
#include <iostream>
#include <vector>
#include <stdint.h>
using namespace std;
int main()
{
cout<<"Hello World";
std::vector<std::string> test_vect {"1", "2"};
long unsigned int size = static_cast<long unsigned int>(test_vect.size());
std::cout << "size: " << size << std::endl;
return 0;
}
以下是编译选项:
g++ file.c -Wall -Wextra "-Werror" "-Wuseless-cast"
您可以看到,我将vector.size()
强制转换为long unsigned int
,这在Wandbox上被标记为无用的转换,但是在我的Linux系统上运行相同的代码不会出现警告-但是如果我不进行类型转换,它会给我不同的警告。我知道两个类型
unsigned long
和size_t
可能不同。但是我想写一些代码,在所有强制转换警告设置下都没有警告(也许这在交叉编译时是乐观的)。所以,一个编译器抱怨我正在转换类型,所以我进行了类型转换,但是另一个编译器正在抱怨无用的转换,因此我删除了类型转换-然后我们绕着圈子:(
有没有好的方法,使我在任何编译器上都不会收到警告?
我本来打算只删除
-Wuseless-cast
选项,但我想看看是否有其他想法...