用整数值初始化非常量引用

桑迪普·辛格(Sandeep Singh)

请考虑以下代码:

#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;
睡觉的Neroku

test's 构造函数:

test(int i)

int作为参数

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

test obj(5);

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

test(int i):ref(i)

您有一个危险的参考:该参考寿命ref超过了被参考的对象(i),因为i一旦返回构造函数,构造函数的参数将不再存在。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

对引用使用多态。非常量引用的初始化无效

C ++-类型的非常量引用的无效初始化

类型的非常量引用的无效初始化

从右值无效初始化非常量引用

类型的非常量引用的无效初始化中的错误

从右值无效初始化非常量引用

用非常量函数参数初始化数组

`错误:非常量引用的初始化无效` 通过引用传递指针

从类型''的右值对类型''的非常量引用进行了无效的初始化

从Visual C ++ 2015中的右值无效初始化非常量引用

类型为std :: _ Bit_rerefence&的非常量引用的无效初始化

类型为'int&'的非常量引用的初始化无效,这是什么原因?

来自 const char* 类型的临时对象的 cost char*& 类型的非常量引用的无效初始化

c ++:“类型为“列表*”的临时类型的类型为“列表&”的非常量引用无效的初始化”

错误:类型'cv :: Mat&'的非常量引用无效的初始化

为什么右值引用作为返回类型不能是非常量引用的初始化?

用一定范围的整数值初始化ArrayList避免循环

C结构初始化(整数和整数值的数组)

基于括号的非常量值的基于范围的初始化?

错误:非常量静态数据成员必须初始化

为什么通过右值初始化非常量引用有效(在C ++ 11中)?

使用字符串调用方法时出错:类型'size_t&的非常量引用的无效初始化

使用非常量引用初始化另一个不同类型的元组元素的元组元素

如何使用构造函数以非常量引用作为参数的私有对象成员初始化对象

使用宏初始化整数常量的对象

C语言中的常量整数和数组初始化

如果用常量初始化,@State 变量不能更改

用常量值初始化std :: array

用位域初始化结构的常量数组