C++ primer 原话 “如果常量本身不是常量,获得的权限是合法的, 如果本身是常量,使用const_cast再写的后果是未定义的。”
例:
const int a;
int *p;
p = const_cast<int*>(&a);
// 错误,未定义(UB)
例:
volatile int a = 5;
volatile const int *p;
p = &a;
*const_cast<int *>(p) = *const_cast<int *>(p) + 1;
cout << a << endl;
//OK,使用volatile的目的是防止编译器优化,无法看到实际a内存内的值