用整数值初始化非常量参考

Initializing non const reference with integer value

本文关键字:常量 参考 非常 初始化 整数      更新时间:2023-10-16

请考虑此代码:

#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(初始化的非const参考(参考(,而以下代码失败:

int& r = 5;

test's构造函数:

test(int i)

int作为参数按值

当您通过将5传递给其构造函数的obj对象时,即:

test obj(5);

该构造函数的参数i设置为5(即:5复制到i中(,然后在构造函数成员初始化列表中使用此参数初始化此参数(而不是构造函数上使用的字面5(,则成员参考ref初始化。/p>

test(int i):ref(i)

您有 danging Reference :参考 ref超出了引用对象(i(,因为构造函数的参数i不再存在构造函数后不再存在。

未直接使用5初始化参考,它是用局部i初始化的。由于i在构造函数的退出时被销毁,因此您将留下一个悬空的参考,这是引用已超出范围的对象的参考。诸如Clang之类的编译器会告诉您有关此事的信息,并发出警告,可能是:

警告:绑定参考成员'ref'堆栈分配参数'i'[ -wdangling-field ]