使用整数值初始化非const引用

San*_*ngh 2 c++ reference

请考虑以下代码:

#include <iostream>

using namespace std;

class test
{
    int& ref;
    public:
    test(int i):ref(i)
    {
        cout << "Constructor Called" << endl;
    }
    void p(){ cout<< ref << "\n";}
};

int main()
{
    test obj(5);
    obj.p();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

Constructor Called
5
Run Code Online (Sandbox Code Playgroud)

怀疑:这里如何使用整数值(5)初始化非const引用(ref),而以下代码失败:

int& r = 5;
Run Code Online (Sandbox Code Playgroud)

眠りネ*_*ネロク 5

test's 构造函数:

test(int i)
Run Code Online (Sandbox Code Playgroud)

值为int参数.

obj通过传递5给构造函数初始化对象时,即:

test obj(5);
Run Code Online (Sandbox Code Playgroud)

构造函数的参数i设置为5(即:5被复制到i),然后ref在构造函数成员初始化列表中使用此参数初始化成员引用(而不是5构造函数调用中使用的文字):

test(int i):ref(i)
Run Code Online (Sandbox Code Playgroud)

你有一个danging引用:引用ref比引用的object(i)i更长,因为构造函数返回后构造函数的参数不再存在.