在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,为什么?我不明白.
在C++中,可以const &改变的价值吗?
好吧,当然不能改变,可以吗?这const意味着什么.而且,听听Stroustrup:
甲
const左值参考指的是恒定的,这是从视角的参照的用户的点不可变的.
但是这个怎么样?
#include <iostream>
int main() {
int a = 0;
const int& r = a;
const int old_r = r;
++a;
const int new_r = r;
std::cout
<< "old_r == " << old_r
<< " but new_r == " << new_r << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在我的机器上,这输出,old_r == 0 but new_r == 1.
这是我真正的问题.在上面的代码中,查看该行
const int new_r = r;
Run Code Online (Sandbox Code Playgroud)
只要
&new_r既不在此行也不在代码的其他地方提取volatile,没有任何东西阻止优化编译器从合并old_r …