必须遵循代码 -
const int WEEKDAYS = 7;
const int *pWeekdays = &WEEKDAYS;
*((int*) pWeekdays) = 9;
cout << WEEKDAYS << endl;
它给出输出7
,即该行*((int*) pWeekdays) = 9;
无效或抛出任何错误。
显然它喜欢这样做7 = 9
,为什么没有抛出错误?
抛弃 const 并因此可变地访问 const 对象是简单的未定义行为。你的程序可以做它想做的任何事情,并且不需要诊断。
永远记住,虽然崩溃的程序确实有错误,但有错误的程序并不总是崩溃。(或者正如苏格拉底所说,“不是每只猫都是鱼”。)
在 C++ 中,你真的不应该使用 C 风格的强制转换。如果您尝试了更合适的static_cast<int*>(pWeekdays)
方法,您将得到正确的诊断。
您已定义WEEKDAYS
为常量,并且您正在更新*pWeekdays
存储在地址中的值pWeekdays
,因此从技术上讲,您不会更新常量。
您定义为的参考WEEKDAYS
或未更新pWeekdays
constant