7
は、次のコードを考えてみましょう:なぜ暗黙のdoubleからintへの変換にclangまたはgccフラグを設定しないのですか?
void f(int x)
{
std::cout << x << std::endl;
}
int main()
{
double x = 1.5;
f(x);
return 0;
}
これは、コンパイルし、実行するすべての警告なし(-Wallを使用して)、したがって、intに、二重の危険な暗黙のキャストを隠します。
f(1.5)
のように、関数がリテラルで呼び出された場合、コンパイラはキャストをキャッチしますが、これはすべて役に立ちません。なぜこれらのコンパイラがこのキャストの警告を出さないのですか?私はOSX 10.8.3でgcc-4.2.1とclang-425.0.28を使っています。後世のために
'-Wconversion'フラグがありますが、これはgcc 4.3でのみサポートされています。 –
それは実際に働いた(clangの下で) - なぜその旗がウォールに含まれないのですか? – giogadi
これは、有効なコードの警告を生成する可能性があり、暗黙的な変換を使用する多くのコードがあります。 –