MSVC const enum类型

Joh*_*ing 5 c++

const enum Alpha{
    X=9,
    Y=5,
    Z=2
}p;
int main(){
    enum Alpha a,b;
    a= X;
    b= Z;

    p = X;
    p = Y;

    printf("%d",a+b-p); 
    return 0; 
}
Run Code Online (Sandbox Code Playgroud)

为什么在MSVC编译器中允许p = X和p = Y?此代码输出6.不应该在初始化时分配const值,而不是再次分配?

Naw*_*waz 6

这是编译器本身的一个错误.故事的结局.

实际上,您的小代码在编译器中显示了两个错误.第一个错误就在这里:

const enum Alpha{
    X=9,
    Y=5,
    Z=2
}p;    //declaration of p is ill-formed!
Run Code Online (Sandbox Code Playgroud)

声明p是不正确的,因此编译器应拒绝此代码,因为p声明const但未初始化.甲const标量(和POD)类型必须为了是合式进行初始化:

const Alpha q;      //ill-formed (same case is with p in your code)
const Alpha r = X;  //well-formed
Run Code Online (Sandbox Code Playgroud)

有关详细和广泛的解释,请参阅: