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值,而不是再次分配?
这是编译器本身的一个错误.故事的结局.
实际上,您的小代码在编译器中显示了两个错误.第一个错误就在这里:
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)
有关详细和广泛的解释,请参阅: