C++ 为什么要将枚举声明标记为const?
我在我工作的项目中看到了这种结构:C++ 为什么要将枚举声明标记为const?,c++,enums,constants,C++,Enums,Constants,我在我工作的项目中看到了这种结构: const enum SomeEnum { val0, val1, val2 }; const的作用是什么?它对代码没有影响,但在这种情况下: const enum SomeEnum { val0, val1, val2 } VAL0 = val0; 这里,VAL0将是一个const变量(值为VAL0)。不过,它没有多大用处。什么都没有。实际上,根据G++的说法,这是一个编译器错误: error: quali
const enum SomeEnum
{
val0,
val1,
val2
};
const
的作用是什么?它对代码没有影响,但在这种情况下:
const enum SomeEnum
{
val0,
val1,
val2
} VAL0 = val0;
这里,
VAL0
将是一个const
变量(值为VAL0
)。不过,它没有多大用处。什么都没有。实际上,根据G++的说法,这是一个编译器错误:
error: qualifiers can only be specified for objects and functions
然而,在C语言中它是允许的,但没有用。GCC表示:
warning: useless type qualifier in empty declaration
问题是
const
只适用于对象(变量)和成员函数,而不适用于基本类型。我认为它确实有区别:“它不应该编译”。@Nawaz我看到它没有编译,但可能只是编译器。规则中有什么规定是不允许的吗?我见过编译器同时接受和拒绝静态结构X{}代码>。与执行常量int相同代码>或类似的我想。在C++中,表达式可以是代码> const 或<代码> Value,而不是类型。这就像写const int代码> @ @克里斯说。“纳瓦兹,我同意这是没有道理的,我的意思是我不认为这是直接被处理的(我知道),所以它可能是编译器。我相信这是无效的C++代码,但Visual Studio确实接受它(GCC不)。此外,VisualStudio还接受const class A{/*…*/}代码>。与MSVC相关的错误: