C++常量引用允许从表达式进行更改

C++ const reference allows change from an expression?

本文关键字:表达式 常量 引用 C++      更新时间:2023-10-16

在C++Primer第五版中关于常量引用的部分中,有一个小示例块:

int i = 42;
const int &r1 = i; // we can bind a const int& to a plain int object
const int &r2 = 42; // ok: r1 is a reference to const
const int &r3 = r1 * 2; // ok: r3 is a reference to const
int &r4 = r * 2; // error: r4 is a plain, non const reference

在第四行,我只是好奇一个常数引用的常数引用是如何成功地将值乘以2的。当r1引用i,使所有内容都为常数时,难道不会发生转换吗?或者第4行中的表达式与r3无关?

在行中

const int& r3 = r1 * 2;

创建临时int并从初始化器表达式r1 * 2复制初始化,然后将r3绑定到临时。这不会像评估3 * 2修改3一样修改r1的引用。