为什么恒定值变化不会被视为错误?

时间:2012-08-28 17:39:25

标签: c++ pointers const

必须遵循代码 -

    const int WEEKDAYS = 7;
    const int *pWeekdays = &WEEKDAYS;
    *((int*) pWeekdays) = 9;
    cout << WEEKDAYS << endl;

它给出输出7,即 - 行*((int*) pWeekdays) = 9;没有效果或抛出任何错误。

显然它就像7 = 9那样,为什么没有错误被抛出?

2 个答案:

答案 0 :(得分:6)

抛弃const并因此可变地访问const对象是简单的未定义的行为。您的程序可以执行任何操作,无需诊断。

永远记住,虽然崩溃的程序是错误的,但错误的程序并不总是崩溃。 (或者正如苏格拉底所说的那样,&#34;不是每只猫都是一条鱼&#34;。)


在C ++中,你真的不应该使用C风格的强制转换。如果您尝试了更合适的static_cast<int*>(pWeekdays),那么您将获得正确的诊断。

答案 1 :(得分:0)

您已将WEEKDAYS定义为常量,并且您正在更新存储在*pWeekdays中的pWeekdays即地址的值,因此从技术上讲,您不会更新常数。

参考WEEKDAYSpWeekdays未更新,您定义为constant