【问题标题】:Why would an enum declaration be marked const?为什么将枚举声明标记为 const?
【发布时间】:2013-07-22 05:48:06
【问题描述】:

我在我工作的项目中看到了这个结构:

const enum SomeEnum
{
    val0,
    val1,
    val2
};

const 这里的目的是什么?

【问题讨论】:

  • 我相信这是无效的 C++ 代码,但 Visual Studio 确实接受它(GCC 不接受)。此外 Visual Studio 也接受const class A { /* ... */ };
  • 相关 MSVC 错误:MSVC const enum type

标签: c++ enums constants


【解决方案1】:

什么都没有。实际上,根据 G++,这是一个编译器错误:

error: qualifiers can only be specified for objects and functions

但是,在 C 语言中它是允许的,但没用。 GCC 说:

warning: useless type qualifier in empty declaration

问题在于const 仅适用于对象(变量)和成员函数,而不适用于基本类型。

【讨论】:

    【解决方案2】:

    它不会对您的代码产生影响,但在这种情况下会:

    const enum SomeEnum
    {
        val0,
        val1,
        val2
    } VAL0 = val0;
    

    这里,VAL0 将是一个const 变量(值为val0)。不过,TBH 用处不大。

    【讨论】:

    • 我认为它确实有所不同:“它不应该编译”。
    • @Nawaz 我看到它没有编译,但这可能只是编译器。规则中有什么反对它的吗?我见过编译器接受和拒绝static struct X{};
    • const int; 或我想象的类似操作相同。
    • 在 C++ 中,表达式可以是 constvolatile,而不是类型。就像@chris 说的那样写const int;
    • @Nawaz 我同意这没有意义,我的意思是我不认为这是直接解决的(据我所知),所以它可能取决于编译器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多