我最近遇到了一个与下一个类似的错误:
double getSomeValue()
{
return 4.0;
}
...
std::string str;
str = getSomeValue();
正如您所看到的,很容易发现问题,但在大型代码库中getSomeValue()
与调用代码不在同一个文件中,可能很难发现这一点double
to std::string
无声转换。 GCC 可以很好地编译这段代码-Wall -Wextra -Werror
(这里的示例输出,我不知道使用了什么警告标志:http://ideone.com/BTXBFk 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() };
^
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)