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,为什么没有错误抛出?
抛弃const并因此可变地访问const对象是简单的未定义行为.您的程序可以执行任何操作,无需诊断.
永远记住,虽然崩溃的程序确实是错误的,但是错误的程序并不总是会崩溃.(或者正如苏格拉底所说的那样,"不是每只猫都是鱼".)
在C++中,你真的不应该使用C风格的强制转换.如果您尝试过更合适static_cast<int*>(pWeekdays),那么您将获得正确的诊断.