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