类成员函数中的C++枚举

Eth*_*Lim 2 c++ enums

对于班级中的枚举......

不正确:

class MyClass{
             public:
               enum kHTTPMethods {GET,PUT,POST}
};

void MyClass::Func(){
    kHTTPMethods method = kHTTPMethod.GET;
}
Run Code Online (Sandbox Code Playgroud)

1)我是否正确地说这不起作用,因为.运算符只能用于类的对象(实例)?

正确:

void MyClass::Func(){
    kHTTPMethods method = GET; 
}
Run Code Online (Sandbox Code Playgroud)

2)我是否正确地说这是正确的,因为类的所有元素在类中变为全局范围?

Ton*_*roy 6

那么,对于你的第一个问题,问题是枚举被放在了范围内class MyClass.无论如何,无论你是否有一个对象,.都不会让你引用枚举,你需要::引用特定范围内的东西.以下内容将进行编译,但更正的MyClass::范围不是必需的或有用的(即您可以说method = GET因为func范围相同GET).

class MyClass
{
  public:
    enum kHTTPMethods {GET,PUT,POST};
    void func() {
        kHTTPMethods method = MyClass::GET;
    }
};
Run Code Online (Sandbox Code Playgroud)

C++ 11添加了一个enum class将它们放在它们自己的嵌套范围内(这样你必须在它们的前面加上[... ::MyClass::] kHTTPMethods::),但是你必须改变你的代码来使用它:

class MyClass
{
  public:
    enum class kHTTPMethods {GET,PUT,POST};    // note "class" after "enum"
    void func() {
        kHTTPMethods method = kHTTPMethods::GET;
    }
};
Run Code Online (Sandbox Code Playgroud)

对于你的第二个问题,是的 - 这是关于它的大小,虽然我会像上面的说法一样.