kar*_*rel 15 c++ reference c++11
在C++入门中,我发现const int &可以用int对象绑定.我不明白,因为我认为const int &应该绑定一个const int不是一个int对象,int对象可以改变,本书解释了这个问题,当const int &对象绑定时int; 两者之间有一个临时对象,例如:
int a=0;
const int &r=a;
Run Code Online (Sandbox Code Playgroud)
我们可以使用b临时值,所以上面等于:
const int b=a;
const int &r=b;
Run Code Online (Sandbox Code Playgroud)
但是我认为这本书不对,因为如果有一个临时的b存在之间,a并且r,价值r无法改变,但是当我在visual studio中调试以下编码时,我发现它不对:
int a=0;
const int &r=a;
a=3;
cout<<r<<endl;
Run Code Online (Sandbox Code Playgroud)
输出是可以改变r=3;的值r,为什么?我不明白.
eer*_*ika 16
不明白,因为我认为
const int &应该绑定一个const int不是一个int对象
你误会了.引用const(简称const引用)并不意味着只能绑定const对象.这意味着无法通过引用修改对象.
不允许的是将非const引用绑定到const对象,因为这样的引用可用于修改将破坏const的对象.
价值
r可以改变,为什么?
r引用的对象被修改 - 这是正常的,因为该对象不是const.r仍然引用相同的对象,并且未使用修改对象r.
具有const引用并不意味着引用的对象不能更改.这意味着无法使用该引用更改对象.
如果你希望有一个无法改变的对象,那么该对象本身必须是const.const引用不会使引用的对象成为const.这本书向您展示了如何创建一个const对象:
const int b=a;
Run Code Online (Sandbox Code Playgroud)
我错误地认为引用是poiter,因为它们在某个时候是相似的.
实际上,引用与指针非常相似.关于这个问题的背景,他们的行为类似.演示:
int a=0;
const int *r=&a;
a=3;
cout<<*r<<endl;
Run Code Online (Sandbox Code Playgroud)
const在此示例中,仅保证a在r使用的位置无法更改.通常这用于不改变输入参数的函数,如:
int doNotModifyFoo(const int &foo);
Run Code Online (Sandbox Code Playgroud)