// case 1
const int i = 42;
const auto &k = i;
// case 2
const int i = 42;
auto &k = i;
Run Code Online (Sandbox Code Playgroud)
在此方案中我们是否需要const关键字auto?毕竟,k对自动推导类型的引用()将包括const对象的顶层().所以我相信在两种情况下都会引用一个为constant()的整数.const int ikconst int &k
如果是真的,这是否意味着const auto &k = i;如果1是由编译器代替,只是const int &k = i;(auto被替换为int)?而在案例2中,auto被替换为const int?
如果“ 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引用进行修改。
谢谢大家