我最近在下一个类似的上下文中出现了一个错误:
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