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 中的引用现在是对已销毁对象的引用。使用引用会导致未定义的行为。

这里使用右值引用没有区别。