const如何与const一起工作?

Nap*_*ook -1 c++ pointers const volatile

我有这个代码,像往常一样,变量"local"的值保持不变,因为它是一个const.

const int local = 10;
int *ptr = (int*)&local;
printf("Initial value of local : %d \n", local);
*ptr = 100;
printf("Modified value of local: %d \n", local);
Run Code Online (Sandbox Code Playgroud)

虽然,当我将local设置为const volatile时,它会将local的值更改为100.为什么?

const volatile int local = 10;
int *ptr = (int*)&local;
printf("Initial value of local : %d \n", local);
*ptr = 100;
printf("Modified value of local: %d \n", local);
Run Code Online (Sandbox Code Playgroud)

我理解的volatile的唯一含义是它阻止编译器对该变量进行优化,以防它的值必须由外部元素更改.但我无法弄清楚如何以及为什么volatile会覆盖const的功能.

编辑 - 从所有答案看来,我的代码是模糊的,任何输出都是不可预测的,因为我正在调用未定义的行为.

tem*_*def 7

在C++中,通过指针更改声明为const的对象的值 - 就像你在这里所做的那样 - 会导致未定义的行为,这意味着绝对会发生任何事情,并且根本无法保证你会看到什么.

在第一种情况下,您看到了存储在const变量中的原始值,但是可以很容易地返回显示不同的值.我的猜测是编译器认识到变量是const,缓存了值,然后将其硬编码到程序集中(尽管我不能确定).

在第二种情况下,我的猜测是编译器认识到变量是易失性的,因此没有缓存事物,因为它不能假设程序外部的东西会改变值.但是,您仍然无法假设这将适用于多个编译器或操作系统.