使用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;
}
它会起作用还是会出现与上面链接相同的错误?
如果我的代码如下,该怎么办?
class Sandbox
{
public:
Sandbox(string&& n) : member(move(n)) {}
const string&& member;
};
它会起作用吗?
答案 0 :(得分:1)
string("four")
临时存在于构造函数调用期间(在链接问题的答案中对此进行了解释)。一旦构造了对象,这个临时就会被破坏。类中的引用现在是对被破坏对象的引用。使用引用导致未定义的行为。
这里使用右值参考没有区别。