Подтвердить что ты не робот

Использование тернарного оператора для инициализации контрольной переменной?

Устраняя все проблемы обслуживания и чтения, могут ли эти строки кода генерировать поведение undefined?

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

Ответ 1

Нет, это просто отлично. Это не создало бы поведение undefined в этом коде. Вы просто измените значение a или b на 5, согласно условию.

Ответ 2

Это абсолютно нормально, если обе стороны условного выражения являются выражениями, которые могут использоваться для инициализации ссылки (например, переменных, разметки указателей и т.д.)

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