C++ 为什么gcc和clang编译为不同的;常数;我的节目结果如何?

C++ 为什么gcc和clang编译为不同的;常数;我的节目结果如何?,c++,gcc,casting,clang,constants,C++,Gcc,Casting,Clang,Constants,我正在使用gcc和clang测试.c和.cpp下的“const”关键字的行为 #include<stdio.h> int main(){ const int i=1; int *pi = (int *)(&i); *pi = 2; printf("i = %d *pi = %d\n",i,*pi); const int j=i; printf("j = %d\n", j); return 0; } 如果我将文件从.c更

我正在使用gcc和clang测试.c和.cpp下的“const”关键字的行为

#include<stdio.h>
int main(){
    const int i=1;
    int *pi = (int *)(&i);
    *pi = 2;
    printf("i = %d *pi = %d\n",i,*pi);
    const int j=i;
    printf("j = %d\n", j);
    return 0;
}
如果我将文件从.c更改为.cpp,并使用g++编译和运行它,那么结果与clang版本相同

$g++ testConst.cpp && ./a.out
i = 1 *pi = 2
j = 1
我想知道:

在C++和C++中,“const”的含义有点不同,所以同一编译器GCC的结果可能导致不同的结果[编译同一个.c文件时,gcc和clang的结果不同,这是正确的,还是未定义的行为?有任何C/C++标准语句可以解释这一点吗
修改
const
变量是未定义的行为。甚至可能是这样:

*pi = 2;
将整数设置为9999。或者使程序崩溃


即使你编译了这个程序,如果你运行了四次,得到了四个不同的结果,你也没有理由抱怨。这就是未定义行为的美妙之处。

修改
常量
变量是未定义行为。甚至可能是这样:

*pi = 2;
将整数设置为9999。或者使程序崩溃


即使你编译了这个程序,如果你运行了四次,得到了四个不同的结果,你也没有理由抱怨。这就是未定义行为的美妙之处。

修改常量变量是一种错误。这也被问了很多次。修改常量变量是非常困难的。这一点以前也被问过很多次。