Модифицировать временный объект?
От: Максим Рогожин Россия  
Дата: 01.09.18 07:27
Оценка:
Привет!

Почему вот этот код работает
class Some {
};

Some func1() {
   Some some;
   return some;
}

int main() {
   Some some2;
   func1() = some2;
}


а этот не компилируется?
int func2(int x) {
   return x*x;
}

int main() {
   func2(1) = 0;
}


Ведь по сути дела одно и то же...
Re: Модифицировать временный объект?
От: σ  
Дата: 01.09.18 13:11
Оценка: 2 (1) +1
Встроенный оператор присваивания требует (modifiable) lvalue слева.
А присваивание для классов это вызов метода. Генерируемый компилятором не имеет ref-квалификаторов и может вызываться объектов, обозначаемых prvalue- (до C++17)/xvalue- (после C++17, после temporary materialization) выражений.
Re[2]: Модифицировать временный объект?
От: σ  
Дата: 02.09.18 07:17
Оценка:
σ>бозначаемых prvalue- (до C++17)/xvalue- (после C++17, после temporary materialization) выражений.

"выраженияМИ", конечно же.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.