18

保守性と読み取りの問題はさておき、これらのコード行で未定義の動作が発生する可能性はありますか?

float  a = 0, b = 0;
float& x = some_condition()? a : b;
x = 5;
cout << a << ", " << b;
4

2 に答える 2

12

いいえ、大丈夫です。このコードで未定義の動作が発生することはありません。条件に応じて、a または b の値を 5 に変更するだけです。

于 2012-07-15T19:39:51.127 に答える
9

条件の両側が参照を初期化するために使用できる式である限り、これは絶対に問題ありません(たとえば、変数、ポインター逆参照など)。

float& x = some_condition()? a : *(&b); // This is OK - it is the same as your code
float& x = some_condition()? a : b+1;   // This will not compile, because you cannot take reference of b+1
于 2012-07-15T19:42:05.680 に答える