c++ - 用整数值初始化非常量引用

标签 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;
}

输出:

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/

相关文章:

C++ [错误] 'operator==' 不匹配(操作数类型为 'Vehicle' 和 'const Vehicle')

c++ - 如何返回 `set` 方法的子类类型?

string - Rust 中是否有 AsRef<T> 的简写形式?

时间:2019-03-08 标签:c++d3dhooking-COMvtable

c++ - 带有 "Accept=true"的 systemd 套接字在服务启动之前有很长的延迟

Java 方法与引用性能

java - 父类(super class)对子类对象的引用

java - java中对象的单纯名称意味着什么(Array,ArrayList)

c++ - 常量做什么?

c# - 组合 C# 和 C++ 项目适用于 x86 和 x64,但不适用于 ARM