请考虑以下代码:
#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)
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更长,因为构造函数返回后构造函数的参数不再存在.