【发布时间】:2016-03-07 11:25:43
【问题描述】:
我最近遇到了一个与下一个类似的错误:
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 有弱版本吗?
【问题讨论】:
-
其实是
double→char→string转换。第一个可以被-Wfloat-conversion捕获,-Wconversion也启用了 -
@Revolver_Ocelot 谢谢,这个标志似乎是我正在搜索的标志。不幸的是,它在 GCC 4.8.2 中不可用
-
@DieterLücking 我在问题中指定我不能使用 -Wconversion 因为我收到很多 unsigned - 1 like 许多包含标题中的构造的错误。
-
当它实际上没有使用大括号初始化时,为什么要标记大括号初始化(如果是这样就没有问题,因为大括号初始化可以防止缩小转换)
-
@Destructor 因为没有构造函数采用单个整数值(最接近的一个采用 char 和 size_t),但是有一个赋值运算符采用单个 char。
标签: c++ gcc type-conversion gcc-warning