C++ 为什么';t clang或gcc标记从double到int的隐式转换?
考虑以下代码:C++ 为什么';t clang或gcc标记从double到int的隐式转换?,c++,gcc,clang,implicit-conversion,C++,Gcc,Clang,Implicit Conversion,考虑以下代码: void f(int x) { std::cout << x << std::endl; } int main() { double x = 1.5; f(x); return 0; } 但这并不是那么有用。为什么这些编译器不对此强制转换发出警告?我使用的是OSX 10.8.3和gcc-4.2.1以及clang-425.0.28。面向后代: 为了避免隐式转换,请使用-Wconversion标志(它不包括在-Wall中)。
void f(int x)
{
std::cout << x << std::endl;
}
int main()
{
double x = 1.5;
f(x);
return 0;
}
但这并不是那么有用。为什么这些编译器不对此强制转换发出警告?我使用的是OSX 10.8.3和gcc-4.2.1以及clang-425.0.28。面向后代:
为了避免隐式转换,请使用-Wconversion标志(它不包括在-Wall中)。Clang实际上在-Weverything标志中包含了-Wconversion,但该标志启用的警告比大多数用户习惯的要多。有
-Wconversion
标志,但只有gcc 4.3才支持它(在Clang下)-为什么该标志不包含在-Wall中?它可以为有效代码生成警告,而且有很多代码使用隐式转换。
f(1.5)