Константная ссылка на результат тернарного оператора
Почему программа выводит 1, а не 2?
#include <iostream>
int main() {
int x = 1;
const auto& y = true ? x : 1;
x = 2;
std::cout << y << '\n';
}
Ответы (2 шт):
Автор решения: user7860670
→ Ссылка
y - это не ссылка на x. Это ссылка на неименованный временный объект, порождаемый выражением true ? x : 1, который инициализируется либо изначальным значением x, либо литералом 1, и время жизни которого продлевается до конца области видимости ссылки.
Автор решения: AR Hovsepyan
→ Ссылка
В случаи:
int x = 1;
int z = 1;
const auto& k = true ? x : z;
ссылке присваивается то ли объект x, то ли объект z, т.е. вы получаете ожидаемое вами поведение программы.
В вашем примере ссылке присваивается то ли временный объект int(1), то ли такой же(в тернарной операции обe операнда должны быть такими же) временный объект int(x). Вот и получаете ссылку на другой объект.