Ste*_*Cho 0 c++ const reference
如果“ 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
Run Code Online (Sandbox Code Playgroud)
这是CPP Primer 5th的报价:
“ C ++程序员倾向于将短语“对const的引用”缩写为“ const引用”。这种缩写是有道理的-如果您还记得它是一个缩写。从技术上讲,没有const引用。引用不是对象,因此。我们不能将引用本身设为const。确实,因为没有办法使引用引用到另一个对象,所以在某种意义上,所有引用都是const。引用是引用const类型还是非const类型都会影响我们可以做的事情。参考,而不是我们是否可以更改参考本身的绑定。”
我认为这意味着在引用非const对象时将其引用为“ const”绝对没有任何作用。定义引用时,我们也可以删除const关键字。
在这里询问此问题以进行确认。
编辑:看起来我最初的猜想是错误的。我现在了解,对非const对象的const引用确实有一个目的:防止引用修改该对象。非const对象仍然可以通过其他方式修改,但不能通过此const引用进行修改。
谢谢大家
为了更好地理解它,您可以研究 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
Run Code Online (Sandbox Code Playgroud)
所以现在如果我们将指针替换为引用,我们可以看到类似的事情,除了引用本身是不可更改的,即在创建另一个对象后不能引用该对象(与非常量指针不同),并且任何引用都类似于常量指针。所以 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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
355 次 |
| 最近记录: |