从成员函数返回枚举

Yak*_*kov 3 c++ enums

我想补充返回枚举的函数:

class myClass{
    private:
    res _res;
    public:
    enum res{ok,fail};
    res getRes()
    bool checkRes(res r);
    //other function that change _res value
    }
Run Code Online (Sandbox Code Playgroud)

此实现生成编译错误:

res myClass::getRes(){return _res;}
Run Code Online (Sandbox Code Playgroud)

但以下是可以的:

myClass::res myClass::getRes(){return _res;}
Run Code Online (Sandbox Code Playgroud)

为什么枚举返回类型应该由scope指定,而作为enum的参数类型范围不是必需的 - 以下工作正常:

 bool myClass::checkRes(res r){
     if (_res == r){retun true;}
     else {return false;} }
Run Code Online (Sandbox Code Playgroud)

Xeo*_*Xeo 7

因为返回类型不在类的词法范围内.如果您有支持它的C++ 11感知编译器,请使用尾随返回类型(也称为延迟指定的返回类型):

auto myClass::getRest() -> res{ return _res; }
Run Code Online (Sandbox Code Playgroud)

后面的部分->(事实上​​,甚至是参数列表)已经属于类的词法范围,因此没有必要的资格.