【问题标题】:Scope of enumerators in C++ [closed]C ++中枚举数的范围[关闭]
【发布时间】:2018-02-06 20:52:30
【问题描述】:

如何在枚举之外访问枚举的成员,因为所有成员的范围都仅限于它们的块。

    #include<iostream>
    enum{MON,TUE,WED};

    using namespace std;
    int main(){
        cout << TUE;//How TUE is accessed since it has to be limited to enum's scope
        return 0;
}
  1. 枚举成员的范围如何在枚举块之外,因为在类或结构中,其成员的范围仅限于它们定义的块。

  2. 既然我们没有创建枚举对象,那么当内存分配给枚举成员时呢?

【问题讨论】:

标签: c++ memory enums scope


【解决方案1】:

Unscoped enums leak它们的名称在定义它们的enum {} 大括号之外,并进入拥有枚举的范围,在你的情况下,它是一个全局范围。这就是为什么你不能有一个与枚举之一同名的变量。作用域枚举不会将其名称泄漏到定义它们的枚举作用域之外。

【讨论】:

  • 很好的答案罗恩,我编辑了你的答案,如果你想告诉我回滚编辑。
  • @gsamaras 感谢编辑。物有所值。
【解决方案2】:

所有成员的范围仅限于他们的块

没有

C++ 中的 enum 与定义它的命名空间具有相同的范围,在您的情况下是全局范围。

您拥有的是unscoped enum。可能你对scoped enums感到困惑。


PS:The usage of anonymous enums.

【讨论】:

  • 谢谢,我不知道作用域枚举。
  • @MohammadAdil 欢迎您!
【解决方案3】:

所有成员的范围仅限于他们的块

不,C++ 中的enum 不是这种情况:范围是定义enum 的命名空间。这就是你的情况的全局

C++11 及以后的 enum class 通过将 enum 值本地化为 class 来解决此问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-21
    • 1970-01-01
    相关资源
    最近更新 更多