运行下面的代码显示&x=ptr,那么为什么x和*ptr不相等呢?
const int x=10;
int* ptr =(int*) &x;
*ptr = (*ptr)+1;
cout << &x << " " << x << " " << ptr <<" " <<*ptr; //output : 0012FF60 10 0012FF60 11
仅当您遵守规则时,才需要 C++ 实现来使程序正常运行。你违反了规则。 C++ 实现的行为可能是这样的:
- Because
x
被宣布const
,C++ 实现知道只要遵守规则,它的值就不会改变。所以,无论在哪里x
使用时,C++ 实现使用 10 而不费心检查是否x
已经改变。
- Because
*ptr
指向一个非常数int
,实际执行对它的存储和读取。这些“起作用”是因为它指向的内存(其中x
表示)实际上并未被操作系统标记为只读。因此,尽管您不应该这样做,但您仍然可以进行修改。
观察 C++ 实现的行为是否有效如果你遵守规则。如果你没有修改过x
,然后用 10 表示x
无论它出现在哪里都会正常工作。或者,如果您没有声明x
to be const
,那么 C++ 实现就不会假设它总是 10,因此每当x
被访问。这就是 C++ 标准对实现的全部要求:如果遵循规则,它就会起作用。
如果不遵守规则,C++ 实现可能会以看似不一致的方式出现故障。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)