Возврат временного объекта и привязка к ссылке const [дубликат]
Возможные Дубликаты:
продлевает ли Постоянная ссылка жизнь временного?
мой компилятор не жалуется на назначение временной ссылки на const:
string foo() {
return string("123");
};
int main() {
const string& val = foo();
printf("%sn", val.c_str());
return 0;
}
почему? Я думал, что строка возвращается из foo является временным и val может указывать на объект, срок службы которого закончился. Позволяет ли это стандарт C++ и продлевает срок службы возвращаемого объекта?
1 ответ:
это функция C++. Код действителен и делает именно то, что кажется.
как правило, временный объект длится только до конца полного выражения, в котором он появляется. Однако C++ намеренно указывает, что привязка временного объекта к ссылке на const в стеке удлиняет время жизни временного объекта до времени жизни самой ссылки и, таким образом, избегает того, что в противном случае было бы общей ошибкой висячей ссылки. В приведенном выше примере временно возвращается
foo()живет до закрытия фигурной скобки.P. S: это относится только к ссылкам на основе стека. Это не работает для ссылок, которые являются членами объектов.
полный текст: GotW #88: кандидат на "самую важную константу" Херба Саттера.
Comments