这是我第二次犯错,通过创建bool类型的变量而不是double.例如考虑
double f()
{
return true;
}
bool something()
{
return 0.0;
}
double g()
{
bool x = 0.0; // (1)
if (something()) {
x = f(); // where f() is a function returning a double
}
return x;
}
Run Code Online (Sandbox Code Playgroud)
我认为编译器应该告诉我这很糟糕,但是我的编译器(g ++)没有用-Wall发出一个小警告......并且它会在测试中导致一个bug.是否有一些选项让gcc/g ++有警告(例如在第1行,这显然是坏的)?
您可以使用统一初始化来获取错误:
bool x{0.0};
Run Code Online (Sandbox Code Playgroud)
错误:类型“double”无法在初始化列表中缩小为“bool”[-Wc++11-narrowing]
它也可以用于赋值:x = {f()};和返回return {x};。