C ++ const引用允许从表达式改变?

时间:2015-04-06 00:09:04

标签: c++

在C ++ Primer 5th Edition中关于const引用的部分中,有一个小的示例块:

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?

1 个答案:

答案 0 :(得分:3)

在这一行

const int& r3 = r1 * 2;

创建临时int并从初始化表达式r1 * 2进行复制初始化,然后将r3绑定到临时表达式。除了评估r1修改3 * 2之外,这不会修改3的引用。