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

URL*_*L87 2 c++ pointers const

必须遵循代码 -

    const int WEEKDAYS = 7;
    const int *pWeekdays = &WEEKDAYS;
    *((int*) pWeekdays) = 9;
    cout << WEEKDAYS << endl;
Run Code Online (Sandbox Code Playgroud)

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

显然它是这样做的7 = 9,为什么没有错误抛出?

Ker*_* SB 6

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

永远记住,虽然崩溃的程序确实是错误的,但是错误的程序并不总是会崩溃.(或者正如苏格拉底所说的那样,"不是每只猫都是鱼".)


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

  • *"抛弃constness是简单的未定义行为."*.不总是,不一定! (2认同)