为什么这样做:

#include <string>
#include <iostream>
using namespace std;

class Sandbox
{
public:
    Sandbox(const string& n) : member(n) {}
    const string& member;
};

int main()
{
    Sandbox sandbox(string("four"));
    cout << "The answer is: " << sandbox.member << endl;
    return 0;
}

给出以下输出:



代替:

最佳答案

仅本地const引用会延长寿命。

该标准在第8.5.3 / 5节[dcl.init.ref](引用声明的初始化程序部分)中指定了这种行为。您的示例中的引用绑定(bind)到构造函数的参数n,并且当绑定(bind)对象n超出范围时变为无效。

生存期扩展不能通过函数参数传递。 §12.2/ 5 [class.temporary]:

10-08 11:56