Использование тернарного оператора для инициализации контрольной переменной?
Устраняя все проблемы обслуживания и чтения, могут ли эти строки кода генерировать поведение undefined?
float a = 0, b = 0;
float& x = some_condition()? a : b;
x = 5;
cout << a << ", " << b;
Ответ 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