请考虑这段代码:
#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;
}
输出:
Constructor Called
5
疑问: 此处如何使用整数值 (5) 初始化非常量引用 (ref),而以下代码失败:
int& r = 5;
最佳答案
测试的
构造函数:
test(int i)
将 int
作为参数按值。
当您通过将 5
传递给其构造函数来初始化 obj
对象时,即:
test obj(5);
该构造函数的参数 i
设置为 5
(即:5
被复制到 i
),然后成员引用 ref
在构造函数成员初始化列表中使用此参数初始化(而不是在构造函数调用时使用的文字 5
):
test(int i):ref(i)
你有一个悬而未决的引用:引用ref
比被引用的对象(i
)还长,因为构造函数的参数i
在构造函数返回后不再存在。
关于c++ - 用整数值初始化非常量引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48691382/