我想补充返回枚举的函数:
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)
因为返回类型不在类的词法范围内.如果您有支持它的C++ 11感知编译器,请使用尾随返回类型(也称为延迟指定的返回类型):
auto myClass::getRest() -> res{ return _res; }
Run Code Online (Sandbox Code Playgroud)
后面的部分->(事实上,甚至是参数列表)已经属于类的词法范围,因此没有必要的资格.