Возврат временного объекта и привязка к ссылке const [дубликат]




Возможные Дубликаты:
продлевает ли Постоянная ссылка жизнь временного?






мой компилятор не жалуется на назначение временной ссылки на const:



string foo() {
return string("123");
};

int main() {
const string& val = foo();
printf("%sn", val.c_str());
return 0;
}


почему? Я думал, что строка возвращается из foo является временным и val может указывать на объект, срок службы которого закончился. Позволяет ли это стандарт C++ и продлевает срок службы возвращаемого объекта?

539   1  

1 ответ:

это функция C++. Код действителен и делает именно то, что кажется.

как правило, временный объект длится только до конца полного выражения, в котором он появляется. Однако C++ намеренно указывает, что привязка временного объекта к ссылке на const в стеке удлиняет время жизни временного объекта до времени жизни самой ссылки и, таким образом, избегает того, что в противном случае было бы общей ошибкой висячей ссылки. В приведенном выше примере временно возвращается foo() живет до закрытия фигурной скобки.

P. S: это относится только к ссылкам на основе стека. Это не работает для ссылок, которые являются членами объектов.

полный текст: GotW #88: кандидат на "самую важную константу" Херба Саттера.

Comments

    Ничего не найдено.