MGA*_*MGA 3 c++ pointers casting
我知道使用const_cast通常是坏主意,但我正在玩它,我遇到了一个奇怪的行为,其中:
两个指针具有相同的地址值,但在取消引用时,给出不同的数据值.
有没有人对此有解释?
码
#include <iostream>
int main()
{
const int M = 10;
int* MPtr = const_cast<int*>(&M);
(*MPtr)++;
std::cout << "MPtr = " << MPtr << " (*MPtr) = " << (*MPtr) << std::endl;
std::cout << " &M = " << &M << " M = " << M << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
产量
MPtr = 0x7fff9b4b6ce0 (*MPtr) = 11
&M = 0x7fff9b4b6ce0 M = 10
Run Code Online (Sandbox Code Playgroud)
该程序有未定义的bahaviour,因为您可能不会更改const对象.
来自C++标准
4本国际标准中将某些其他操作描述为未定义(例如,尝试修改const对象的效果).[注意:本国际标准对包含未定义行为的程序的行为没有要求. - 尾注]
| 归档时间: |
|
| 查看次数: |
452 次 |
| 最近记录: |