c++ - 用于返回嵌套类类型的范围解析运算符

标签 c++ class scope-resolution-operator

我知道范围解析运算符 :: 用于识别和消除在不同范围内使用的标识符的歧义。

在此处提供的示例中 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;
}
  1. 为什么作用域必须在函数定义中声明两次? UserInformation::UserInfo UserInformation::getInfo(int userId) 如果只声明一次是错误的,但是根据我的理解,我认为在开始时声明一次,在返回值之前会让我们已经在正确的范围内了吗?
  2. 在上面的函数中,我添加了 Userinfo x; 以表明可以在没有范围解析运算符的情况下声明和使用嵌套类类型。为什么允许这样做?

最佳答案

  1. 函数返回类型需要类范围,因为name lookup还不知道。

如果您希望使用 C++11 尾部函数返回类型,则可以绕过该要求。

auto UserInformation::getInfo(int userId) -> UserInfo
{ ... }
  1. 成员函数体内不需要类作用域,因为类作用域显然是已知的。

关于c++ - 用于返回嵌套类类型的范围解析运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58851504/

相关文章:

c++ - 不同数据类型的sizeof(datatype pointer)/sizeof(data type)取值不同,为什么?

c++ - 运算符重载中的作用域运算符

c++ - 如何使用 C++ 中的函数访问全局变量?

python - 在 python 中从列表中删除类实例有困难

c++ - 找不到 Mexopencv mex 文件

c++ - C++库中有没有将字符串转换为算术运算的函数?

c++ - 多个文件中的常量定义

c++ - 我可以在 C++ 中使用智能指针作为类成员吗?

javascript - 简单的检索和赋值 getter 和 setter 在 JavaScript 中有用吗?