作业中参考的含义

时间:2019-02-25 13:55:59

标签: c++ casting pass-by-reference

为什么可以在下面的C ++代码段中更改常数z的值?第5行中的(int&)是什么意思?请注意,x,y,z的地址不同(cout <<&x <<&y <<&z)。非常感谢你!

int x = 2;
int y = 3;
const int z = x;
cout << z; // the result is 2
(int&) z = y;
cout << z; // the result is 3

1 个答案:

答案 0 :(得分:0)

因为在这种情况下,我们在赋值表达式的左侧进行了强制类型转换,该值告诉编译器我们正在强制执行标识符,以便其表现为对其内存位置的非只读引用,并且由于我们明知“强制”行为,编译器信任我们并允许此分配。

在某些情况下,这是潜在的危险,因为当您为const标识符分配文字值时,由于编译器如何实现此初始化不是标准的方法,因此实际上某些编译器似乎用文字值替换了出现的标识符,以及宏扩展,因此您必须非常注意执行此操作。