c – 用于隐式转换的gcc警告标志

前端之家收集整理的这篇文章主要介绍了c – 用于隐式转换的gcc警告标志前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我最近在下一个类似的上下文中出现了一个错误
double getSomeValue()
{
    return 4.0;
}
...
std::string str;
str = getSomeValue();

正如你可以看到的,很容易发现问题,但是在一个大的代码库中,getSomeValue()与调用代码不在同一个文件中,可能很难将这个双重标记发送到std :: string静默转换. GCC使用-Wall -Wextra -Werror(这里的示例输出,我不知道使用了什么警告标志)编译此代码http://ideone.com/BTXBFk).

如何强制GCC对这些危险的隐性转换发出警告?我尝试过 – 转换,但它是非常严格的,它导致错误在大多数包含的标题为常见的情况,如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
}

06001

猜你在找的C&C++相关文章