C ++对非Const对象的Const引用与非Const对象的非Const引用之间的区别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C ++对非Const对象的Const引用与非Const对象的非Const引用之间的区别相关的知识,希望对你有一定的参考价值。
如果引用的对象不是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 to const“缩写为”const reference“。这个缩写是有意义的 - 如果你记得它是一个缩写。从技术上讲,没有const引用。引用不是一个对象,所以我们不能自己做一个引用const。的确,因为没有办法让引用引用一个不同的对象,在某种意义上所有引用都是const。引用是指const还是nonconst类型会影响我们可以用它做什么引用,而不是我们是否可以改变引用本身的绑定。“
我认为这意味着在引用非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;
为了更好地理解它,你可以研究const指针和指向const数据的指针之间的区别:
int i, j;
const int *p1 = &i; // pointer to constant int
int *const p2 = &i; // constant pointer to int
*p1 = 0; // error, p1 points to const int
*p2 = 0; // it is fine sets i to 0
p1 = &j; // fine p1 now points to anbother int
p2 = &j; // error, p2 is a constant pointer
所以现在如果我们将指针替换为引用,我们可以看到类似的东西,除了引用本身是不可更改的,即你不能在创建它之后引用引用另一个对象(与非常量指针不同),并且任何引用都像常量指针。所以const引用在这个意义上没有任何意义,通常由const引用人们意味着引用const类型。引用引用的意思是什么。
至于你的代码的差异,是的有区别 - 你不能通过const引用改变对象无关紧要,如果该引用指向const对象。
有一种有用的方法可以找出const
ness在指针和引用中的含义,即从右到左阅读声明(参见these answers)。所以const int &r1
可以被解读为“r1
是对int const
的引用”。
基本上,r1
指的是不能修改的int
。这意味着所提到的int
要么是const int
,要么是简单的int
。 const
const引用与非const
对象的绑定(例如,当编写像int i = 5; const int& r = i;
这样的东西时)是完全合法的,因为没有修改非const
对象没有错。
我认为这意味着在引用非const对象时将引用设为“const”绝对没有任何意义。在定义引用时,我们也可以将const关键字取出。
不对。
您不能通过const
参考修改非const
对象。
您可以通过非const
参考修改非const
对象。
除非在程序的只读部分中创建对象,否则它可以进行修改而不会产生不良后果。但是,当您对非const
对象使用const
引用时,您要求编译器不允许您通过该特定引用修改对象。这并不意味着您不会修改对象。
它与函数参数类似。当函数使用const
引用参数类型时,该函数向您承诺它不会修改该对象。这并不意味着对象根本不可修改。
如果我们将const与变量一起使用,那么它的值不能改变,当它与const引用一起使用时,如果我们将它与对象一起使用则不能改变它的引用,那么整个数据在对象中使用它不能被改变。
以上是关于C ++对非Const对象的Const引用与非Const对象的非Const引用之间的区别的主要内容,如果未能解决你的问题,请参考以下文章