1、constexpr 和 const
const 的原本和基础的含义是表示它修饰的内容不会变化,本质上,const 用来表示一个运行时常量。如:
const int n = 1;
n = 10; //报错
但是我们依然可以通过指针来修改n在内存中的数据
const int n = 1;
int* p = (int *)&n;
*p = 10;
std::cout << n;
但是输出发现还是1,查看汇编代码
std::cout << n;
00E752FE mov esi,esp
00E75300 push 1
由此看出,在编译阶段,编译器对于所有使用了const变量值的地方统统将其用其值来替换,而非去内存中寻址取值,我们用volatile来修饰,强制每次都从内存中取值
volatile const int n = 1;