繁体   English   中英

隐式转换的gcc警告标志

[英]gcc warning flags for implicit conversions

我最近在下一个类似的上下文中遇到了一个错误:

double getSomeValue()
{
    return 4.0;
}
...
std::string str;
str = getSomeValue();

正如您在这里看到的那样很容易发现问题,但是在一个大型代码库中, getSomeValue()与调用代码不在同一个文件中,可能很难发现这个doublestd::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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM