zem*_*eht 3 c++ return rvalue-reference xvalue c++17
考虑以下函数。我想要C++17的答案。
MyClass&& func() {
return MyClass{};
}
int main() {
MyClass&& myRef = func();
}
Run Code Online (Sandbox Code Playgroud)
问题:
func()x 值吗?为什么?myRef悬空引用?或者,更具体地说,为什么要func()返回悬空引用?返回右值引用不会导致临时物化并延长临时对象的生命周期吗?func()是 xvalue ,因为该语言的规则之一是,如果将函数声明为具有对对象的右值引用的返回类型,则由调用该函数组成的表达式就是 xvalue 。(C++17 expr.call/11)。
每当引用绑定到纯右值时,就会发生临时具体化。
该函数的结果myRef是由纯右值初始化的func()。然而,如果我们查阅 class.temporary/6 中的生命周期延长规则,它有:
函数返回语句中绑定到返回值的临时变量的生命周期不会延长;临时值在 return 语句中完整表达式的末尾被销毁。
因此,当语句完成时,由 实现的临时对象func() 将被销毁return,并且没有扩展。
| 归档时间: |
|
| 查看次数: |
275 次 |
| 最近记录: |