【发布时间】:2021-09-26 06:57:00
【问题描述】:
#include <iostream>
using namespace std;
int main() {
const int a = 20;
const int* b = &a;
cout<<"b* = "<<*b<<"\n";
int* c=const_cast<int *>(b);
*c=40;
cout<<"b* = "<<*b<<" a = "<<a;
return 0;
}
【问题讨论】:
-
为什么
const对象的值应该改变? -
表达式与您描述的不同-
*c = 40(在您的代码中)和c *= 40(在问题的标题中)意味着不同的东西。无论如何,您都在使用const_cast来强制编译器稍后允许对实际上是const的内容进行明显更改-因此您的代码具有 undefined 行为。根据定义,C++ 标准没有定义行为未定义时会发生什么,因此任何结果都是可能的(例如,不更改您希望更改的内容)并且编译器不需要发出有关未定义行为的诊断(例如错误或警告) .
标签: c++ const-cast