赋值中引用的含义
Meaning of reference in assignment
为什么可以在下面的 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
因为在这种情况下,我们在赋值表达式的左侧进行了强制转换,它告诉编译器我们正在强制我们的标识符,以便它表现为对其内存位置的非只读引用,并且由于我们是有意 "forcing" 一种行为,编译器信任我们并允许此分配。
在某些情况下,这是潜在的危险,因为当您为 const 标识符分配文字值时,因为编译器实现此初始化的方式并不标准,事实上,一些编译器似乎将标识符的出现替换为文字值,以及宏扩展,因此您必须非常密切地注意执行此操作。
为什么可以在下面的 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
因为在这种情况下,我们在赋值表达式的左侧进行了强制转换,它告诉编译器我们正在强制我们的标识符,以便它表现为对其内存位置的非只读引用,并且由于我们是有意 "forcing" 一种行为,编译器信任我们并允许此分配。
在某些情况下,这是潜在的危险,因为当您为 const 标识符分配文字值时,因为编译器实现此初始化的方式并不标准,事实上,一些编译器似乎将标识符的出现替换为文字值,以及宏扩展,因此您必须非常密切地注意执行此操作。