gru*_*czy 61 c++ const reference
可能重复:
const引用是否延长了临时的寿命?
我的编译器没有抱怨为const引用分配临时:
string foo() {
return string("123");
};
int main() {
const string& val = foo();
printf("%s\n", val.c_str());
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么?我认为返回的字符串foo是临时的,val可以指向生命周期结束的对象.C++标准是否允许这样做并延长返回对象的生命周期?
Ser*_* K. 71
这是一个C++功能.代码是有效的,并且完全符合它的样子.
通常,临时对象仅持续到它出现的完整表达式的结尾.但是,C++故意指定将临时对象绑定到堆栈上对const的引用会延长临时对象生命周期的生命周期,从而避免了常见的悬空引用错误.在上面的例子中,临时返回的foo()生命直到结束大括号.
PS:这仅适用于基于堆栈的引用.它不适用于作为对象成员的引用.
全文:GotW#88:Herb Sutter的"最重要的const"的候选人.
| 归档时间: |
|
| 查看次数: |
20276 次 |
| 最近记录: |