質問

このキャストがどのような効果をもたらすのか (happyNumber を 1337 に設定する以外に)、もしあれば教えてください。他に効果がない場合、なぜこのようなコードを記述できるのでしょうか。これはコンパイラのバグですか、それとも C++ の「隠れた機能」ですか?

int happyNumber = static_cast<int>(123.456, TRUE, "WTF" , false , "IS" , NULL , "GOING" , 0xff , "ON???" , 1337);

これでコンパイルできることに驚きました。私がこの問題を発見したのは、キャストされる式の関数呼び出しに含まれるはずだったものを誤って 2 番目のパラメータに設定してしまうというバグによってでした。これにより、オブジェクトが 2 番目のパラメータからキャストされ、引数を 1 つだけ指定して関数を呼び出すという厄介なバグが発生しました。それはコンパイルされました...そして、最初はブームではありませんでした...

Microsoft Visual C++ 2008を使用しています。

役に立ちましたか?

解決

静的キャストは引数を 1 つとりますが、その引数は式であり、式には カンマ演算子. 。カンマは、副作用について 2 つ以上の式を一度に評価したい状況で使用されます。例:

int i, j;
for (i=0, j=0; i < 10; i++,j++) {
    // do stuff
}

これがないと、for ループのイニシャライザ、条件、継続部分 (または式が予期されるその他の場所) に対してそれぞれ 1 つの式しか評価できないため、多少便利です。ただし、これは通常、最も明確なコードにはならず、セマンティクスも奇妙です。ご覧のとおり、カンマ区切りのシーケンスは最後の式の値として評価されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top