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++类中,有6个默认成员函数: 构造函数 析构函数 拷贝...
#pragma once // 1. 设计一个不能被拷贝的类/* 解析:拷贝只会放生在两个场景中:拷贝构造函数以及赋值运...
C类型转换 C语言:显式和隐式类型转换 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译...
//异常的概念/*抛出异常后必须要捕获,否则终止程序(到最外层后会交给main管理,main的行为就是终止) try...
#pragma once /*Smart pointer 智能指针;灵巧指针 智能指针三大件//1.RAII//2.像指针一样使用//3.拷贝问...
目录&lt;future&gt;future模板类成员函数:promise类promise的使用例程:packaged_task模板类例程...