使用构造函数进行引用初始化

Reference initialization with constructor

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

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

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

我谈到了泛型类型 T。我针对基本类型和 类 测试了上面的代码,结果是相同的。

在这些声明中

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