Тема в значительной степени находится в названии вопроса. Я видел это в Meyrses книге «Эффективное использование C++»:C++ возвращает объекты по значению
тот факт, что C++ возвращает объекты по значению
Что это значит и как стандарт C++ поддерживает это сообщение? Для instanance, говорят, что у нас есть что-то вроде этого:
int foo()
{
int a = 1;
return a;
}
Это довольно ясно, эта фраза означает, что мы возвращает копию значения, хранимого в локальной переменной. Но учтите следующее:
int& foo()
{
int a = 1;
return a;
}
Компилятор должен предупредить нас о возврате ссылки на локальную переменную. Как этот «возврат по значению стоимости» применяется к этому примеру?
Значение, возвращаемое во втором примере, является указателем на определенный адрес памяти. Тот факт, что адрес просто оказывается временным местом в стеке, является случайным. (И да, хороший компилятор выдает предупреждение здесь) – shuttle87
@ shuttle87: Нет, это не так. Это ссылка, а не указатель. –
@ shuttle87 Я не уверен, можем ли мы поговорить о том, что происходит во втором примере, потому что я думаю, что это UB. –