C++ g++-墙不警告双->;智力测验

C++ g++-墙不警告双->;智力测验,c++,g++,C++,G++,在以下代码段中,不会产生任何警告。g++4.4.3-墙壁-迂腐 //f is void f(int ); f(3.14); double d = 3.14; int i = d+2; 我强烈记得这是一个警告,类似于“可能失去精确性”。它被移除了还是我的记忆在捉弄我 如何在g++中将其转换为警告?我觉得这是一个有用的警告,还是一个坏主意 我甚至无法在使用-Wconversion选项中找到任何合适的内容-墙不包括它 使用-Wconversion选项,GCC会发出以下警告消息: 警告:转换为“in

在以下代码段中,不会产生任何警告。g++4.4.3-墙壁-迂腐

//f is
void f(int );

f(3.14);
double d = 3.14;
int i = d+2;
我强烈记得这是一个警告,类似于“可能失去精确性”。它被移除了还是我的记忆在捉弄我

如何在g++中将其转换为警告?我觉得这是一个有用的警告,还是一个坏主意


我甚至无法在

使用
-Wconversion
选项中找到任何合适的内容<代码>-墙不包括它

使用
-Wconversion
选项,GCC会发出以下警告消息:

警告:转换为“int”会改变“double”常量值
警告:从“double”转换为“int”可能会改变其值


除了其他答案提到的以外,还值得一提的是,在C++0x
{}
中,初始化并没有缩小范围。因此,您将得到一个错误,而不是警告

void f(int x)
{
   // code
}

int main()
{
   f({3.14}); // narrowing conversion of '3.14000000000000012434497875801753252744674682617e+0' from 'double' to 'int' inside { }
}

和上面的支持初始值设定项列表(使用
-std=c++0x
选项)

是的,这就完成了。我发现它没有包含在-Wall中真的很奇怪。它会导致数百个与整数相关的转换警告,这就是为什么它没有在
-Wall
中启用。也许用它会更简单。
void f(int x)
{
   // code
}

int main()
{
   f({3.14}); // narrowing conversion of '3.14000000000000012434497875801753252744674682617e+0' from 'double' to 'int' inside { }
}