[英]gcc warning flags for implicit conversions
我最近在下一个类似的上下文中遇到了一个错误:
double getSomeValue()
{
return 4.0;
}
...
std::string str;
str = getSomeValue();
正如您在这里看到的那样很容易发现问题,但是在一个大型代码库中, getSomeValue()
与调用代码不在同一个文件中,可能很难发现这个double
到std::string
静态转换。 GCC用-Wall -Wextra -Werror
编译这段代码(这里的示例输出,我不知道使用了什么警告标志: http : //ideone.com/BTXBFk )。
我如何强制GCC为这些危险的隐式转换发出警告? 我尝试了-Wconversion
,但它非常严格,并且在大多数包含的标题中导致错误,例如unsigned - 1
。 是否有较弱版本的-Wconversion
?
您可以使用-Wfloat-conversion
标志或更广泛的-Wconversion
。
但是,请注意,使用C ++ 11 统一初始化大括号语法 ,您将获得“开箱即用”的警告,而不使用-Wconversion
标志; 例如:
#include <string>
double getSomeValue() {
return 4.0;
}
int main() {
std::string str{ getSomeValue() }; // C++11 brace-init
}
C:\\Temp\\CppTests>g++ -std=c++11 test.cpp test.cpp: In function 'int main()': test.cpp:8:35: warning: narrowing conversion of 'getSomeValue()' from 'double' t o 'char' inside { } [-Wnarrowing] std::string str{ getSomeValue() }; ^
您可以使用-Wconversion
并避免错误unsigned - 1
与-Wno-sign-conversion
,如规定在这里 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.