按照这个问题的公认答案右值引用是否允许悬空引用?当分配给问题中的右值引用左值时,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 解释中的第三个项目符号列出了成员访问 I有上面作为一个xvalue,)
am,对象表达式的成员,其中 a 是右值,m 是非引用类型的非静态数据成员;
如果值类别不能确定右值的生命周期何时会延长,那该怎么办?当右值的生命周期在 C++ 中延长时,我很难理解