我知道范围解析运算符 ::
用于识别和消除在不同范围内使用的标识符的歧义。
在此处提供的示例中 C++ define class member struct and return it in a member function
class UserInformation
{
public:
userInfo getInfo(int userId);
private:
struct userInfo
{
int repu, quesCount, ansCount;
};
userInfo infoStruct;
int date;
};
您可以创建一个返回嵌套类 userInfo
类型的成员函数。
UserInformation::UserInfo UserInformation::getInfo(int userId) <-----
{
Userinfo x; <-----
infoStruct.repu = 1000;
return infoStruct;
}
- 为什么作用域必须在函数定义中声明两次?
UserInformation::UserInfo UserInformation::getInfo(int userId)
如果只声明一次是错误的,但是根据我的理解,我认为在开始时声明一次,在返回值之前会让我们已经在正确的范围内了吗? - 在上面的函数中,我添加了
Userinfo x;
以表明可以在没有范围解析运算符的情况下声明和使用嵌套类类型。为什么允许这样做?
最佳答案
- 函数返回类型需要类范围,因为name lookup还不知道。
如果您希望使用 C++11 尾部函数返回类型,则可以绕过该要求。
auto UserInformation::getInfo(int userId) -> UserInfo
{ ... }
- 成员函数体内不需要类作用域,因为类作用域显然是已知的。
关于c++ - 用于返回嵌套类类型的范围解析运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58851504/