为什么不分配 c*=40 改变 a 的值?

问题描述

#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++ spec 节 10.1.7.1 点 4

任何在其生命周期内修改 const 对象的尝试都会导致结果 在未定义的行为中。

const int* ciq = new const int (3);  // initialized as required
int* iq = const_cast<int*>(ciq);     // cast required
*iq = 4;                             // undefined: modifies a const object
,

a 的值没有改变,因为你正在使用 const int a = 20; 要更改 a 的值,您可以简单地声明 int a =20;