C++ 中的右值引用延长了临时对象的生命周期
An rvalue reference in C++ prolongs the life of a temporary object
通过 Stack Overflow 问题 Does a const reference prolong the life of a temporary?,我了解了 const 引用如何延长临时对象的生命周期。
我知道右值引用也可以延长临时对象的寿命,但我不知道是否有一些区别。
所以如果我这样编码:
#include <string>
#include <iostream>
using namespace std;
class Sandbox
{
public:
Sandbox(string&& n) : member(n) {}
const string& member;
};
int main()
{
Sandbox sandbox(string("four"));
cout << "The answer is: " << sandbox.member << endl;
return 0;
}
它会工作还是会出现与上述 link 相同的错误?
如果我像下面这样编码会怎样?
class Sandbox
{
public:
Sandbox(string&& n) : member(move(n)) {}
const string&& member;
};
有用吗?
string("four")
临时对象在构造函数调用期间存在(这在链接问题的答案中有解释)。一旦构建了对象,这个临时对象就会被销毁。 class 中的引用现在是对已销毁对象的引用。使用引用会导致未定义的行为。
这里使用右值引用没有区别。
通过 Stack Overflow 问题 Does a const reference prolong the life of a temporary?,我了解了 const 引用如何延长临时对象的生命周期。
我知道右值引用也可以延长临时对象的寿命,但我不知道是否有一些区别。
所以如果我这样编码:
#include <string>
#include <iostream>
using namespace std;
class Sandbox
{
public:
Sandbox(string&& n) : member(n) {}
const string& member;
};
int main()
{
Sandbox sandbox(string("four"));
cout << "The answer is: " << sandbox.member << endl;
return 0;
}
它会工作还是会出现与上述 link 相同的错误?
如果我像下面这样编码会怎样?
class Sandbox
{
public:
Sandbox(string&& n) : member(move(n)) {}
const string&& member;
};
有用吗?
string("four")
临时对象在构造函数调用期间存在(这在链接问题的答案中有解释)。一旦构建了对象,这个临时对象就会被销毁。 class 中的引用现在是对已销毁对象的引用。使用引用会导致未定义的行为。
这里使用右值引用没有区别。