保守性と読み取りの問題はさておき、これらのコード行で未定義の動作が発生する可能性はありますか?
float a = 0, b = 0;
float& x = some_condition()? a : b;
x = 5;
cout << a << ", " << b;
保守性と読み取りの問題はさておき、これらのコード行で未定義の動作が発生する可能性はありますか?
float a = 0, b = 0;
float& x = some_condition()? a : b;
x = 5;
cout << a << ", " << b;
いいえ、大丈夫です。このコードで未定義の動作が発生することはありません。条件に応じて、a または b の値を 5 に変更するだけです。
条件の両側が参照を初期化するために使用できる式である限り、これは絶対に問題ありません(たとえば、変数、ポインター逆参照など)。
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