【发布时间】:2017-07-15 11:19:02
【问题描述】:
按照这个问题的公认答案Do rvalue references allow dangling references? 看起来,当分配给问题中的右值引用左值时,xvalues 的生命周期并没有延长。但是当我这样做时
#include <iostream>
using namespace std;
class Something {
public:
Something() {
cout << "Something()" << endl;
}
Something(const Something&) {
cout << "Something(const Something&)" << endl;
}
Something(Something&&) {
cout << "Something(Something&&)" << endl;
}
~Something() {
cout << "~Something()" << endl;
}
int a;
};
Something make_something() {
return Something{};
}
int main() {
auto&& something = make_something().a;
return 0;
}
通过调用make_something 返回的对象的生命周期被延长,即使make_something().a 是根据http://en.cppreference.com/w/cpp/language/value_category 的xvalue(xvalues 解释中的第三个项目符号列出了我在上面作为xvalue 拥有的成员访问权限,)
a.m,对象表达式的成员,其中 a 是右值,m 是 a 非引用类型的非静态数据成员;
如果值类别不能确定右值的生命周期何时会延长,那该怎么办?当右值的生命周期在 C++ 中延长时,我很难理解
【问题讨论】:
标签: c++ c++11 xvalue prvalue value-categories