C++ 对非 Const 对象的 Const 引用与对非 Const 对象的非 Const 引用之间的区别

标签 c++ reference constants

如果引用的对象不是 const 对象,那么引用“const”关键字的目的是什么? r1 和 r2 的作用(如下)有什么不同吗?

int i = 42; // non const object
const int &r1 = i; // const reference to non const object

int j = 25; // non const object
int &r2 = j; // non const reference to non const object

引用自 CPP Primer 5th:

“C++ 程序员倾向于将短语“对常量的引用”缩写为 “常量引用。”这个缩写是有道理的——如果你还记得的话 是缩写。 从技术上讲,没有 const 引用。引用不是 对象,所以我们不能使引用本身为常量。的确,因为有 没有办法使引用引用不同的对象,在某种意义上所有 引用是常量。引用是引用 const 还是 nonconst 类型影响我们可以用那个引用做什么,而不是我们是否可以改变 引用本身的绑定(bind)。”

我认为这意味着在引用非 const 对象时将引用设为“const”绝对没有任何作用。我们不妨在定义该引用时去掉该 const 关键字。

在这里问这个问题是为了确认。

编辑:看来我最初的猜想是错误的。我现在明白,对非 const 对象的 const 引用确实有一个目的:防止引用修改对象。非 const 对象仍然可以通过其他方式修改,但不能通过此 const 引用。

谢谢大家。

最佳答案

“如果引用的对象不是 const 对象,引用的“const”关键字的目的是什么?” 目的是防止该引用被用来修改它所引用的对象。

int i = 42; // non const object
const int &r1 = i; // const reference to non const object
r1 = 6 * 9; // error, r1 cannot be used to modify i;

关于C++ 对非 Const 对象的 Const 引用与对非 Const 对象的非 Const 引用之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52103491/

相关文章:

c++ - 理解递归中的引用参数

java - 使用其值获取接口(interface)常量名称

parameters - golang函数中的常量参数

c++ - C++ 中的编译和链接

c++ - Hook sendto() 会导致崩溃,具体取决于代码顺序

java - Java中的实例变量是通过引用传递的吗?

c# - 缺少系统.Windows

c++ - 什么是 'linkonce' 部分

c++ - 文件的新 C++ 错误

haskell - 理解 Data.Functor.Constant 构造函数和应用规律