返回临时对象并绑定到const引用

可能重复:
const引用是否延长了临时的生命?

我的编译器不抱怨将临时指派给const引用:

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

为什么? 我认为从foo返回的string是临时的,val可以指向哪个对象的生命周期已经完成。 C ++标准是否允许这个并延长返回对象的生命周期?

这是一个C ++function。 该代码是有效的,并做它看起来做什么。

通常情况下,临时对象只能持续到它出现的完整expression式的结尾。 但是,C ++故意指定将临时对象绑定到堆栈上对const的引用会将临时的生命周期延长到引用自身的生命周期,从而避免了常见的悬空引用错误。 在上面的例子中,由foo()返回的临时存在直到结束大括号。

PS:这只适用于基于堆栈的引用。 它不适用于对象成员的引用。

全文: GotW#88:Herb Sutter的“最重要的常量”的候选人 。