Почему не разрешается получать неконстантную ссылку на временный объект,
какая функция getx()
возвращается? Очевидно, что это запрещено стандартом С++
но меня интересует цель такого ограничения, не ссылка к стандарту.
struct X
{
X& ref() { return *this; }
};
X getx() { return X();}
void g(X & x) {}
int f()
{
const X& x = getx(); // OK
X& x = getx(); // error
X& x = getx().ref(); // OK
g(getx()); //error
g(getx().ref()); //OK
return 0;
}
- Ясно, что время жизни объекта не может быть причиной, потому что постоянная ссылка на объект не запрещена стандартом С++.
- Ясно, что временный объект не является константой в примере выше, потому что допускаются вызовы на непостоянные функции. Например,
ref()
может изменить временный объект. - Кроме того,
ref()
позволяет обмануть компилятор и получить ссылку на этот временный объект и который решает нашу проблему.
Кроме того:
Говорят, что "назначение временного объекта для ссылки на const ссылается на время жизни этого объекта" и "Ничто не сказано о неконстантных ссылках, хотя". Мой дополнительный вопрос. Предоставляет ли следующее задание время жизни временного объекта?
X& x = getx().ref(); // OK