普查员的范围

Kuy*_*nai 6 c++ enums scope compiler-errors

在下面,我不知道我是否在C#中使用C++来混淆枚举,但我认为你只能访问枚举中的枚举器Forms::shape,这实际上会产生错误.

int main()
{
    enum Forms {shape, sphere, cylinder, polygon};

    Forms form1 = Forms::shape; // error
    Forms form2 = shape; //  ok
}
Run Code Online (Sandbox Code Playgroud)

shape如果没有范围运算符,为什么允许在枚举之外访问?如何防止此行为?

AnT*_*AnT 5

好吧,因为枚举不形成声明范围.这就是它在C++中的方式.您希望将这些枚举常量封装在专用范围中,自己创建一个:使​​用包装类或命名空间.

即将推出的C++标准将引入新的枚举,它确实产生了自己的范围.

  • 请注意,相同的作用域将被反向移植到C++ 0x中的常规枚举中.区别在于`enum class`将强制作用域,而常规`enum`允许你使用_either_作用域. (2认同)