首页 > 解决方案 > 使用构造函数进行引用初始化

问题描述

const T   a {}; // constant of type T
const T&  b {}; // ???
      T   c {}; // variable of type T
      T&  d {}; // error

a和 和有什么不一样b
b是一个引用,但我没有为其分配对象:在该指令中,我通过 T 构造函数对其进行初始化。
的地址b在a和c的地址之间,所以看起来ba没有区别。

如果我可以声明和初始化b为什么d会出现编译错误?

我谈到了泛型类型 T。我测试了上面的代码的原始类型和类,结果是一样的。

标签: c++constructorreferenceinitializationdeclaration

解决方案


在这些声明中

const T   a {}; // constant of type T
const T&  b {}; 

创建了默认初始化的常量对象和对默认初始化的临时对象的a常量引用。b

编译器针​​对此引用声明发出错误

T&  d {}; // error

因为声明了对临时对象的非常量引用。

您可以通过以下方式声明右值引用

T&&d {};

这是一个演示程序

#include <iostream>

int main() 
{
    const int &ri {};

    std::cout << "ri = " << ri << '\n';

    int && rri {};

    std::cout << "rri = " << rri << '\n';

    return 0;
}

程序输出为

ri = 0
rri = 0

推荐阅读