用于返回嵌套类类型的作用域解析运算符



我知道作用域解析运算符::用于识别和消除不同作用域中使用的标识符的歧义。

在这里提供的例子中,C++定义类成员结构并在成员函数中返回它

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;,以表明嵌套类类型可以在没有范围解析运算符的情况下声明和使用。为什么允许这样做
函数返回类型需要类作用域,因为名称查找还不知道它

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

auto UserInformation::getInfo(int userId) -> UserInfo
{ ... }
  1. 在成员函数体内不需要类作用域,因为在那里类作用域显然是已知的
  1. 为什么必须在函数定义中声明两次作用域?UserInformation::UserInfo UserInformation::getInfo(int userId)

对于返回类型和函数标识符,应用外部作用域(class UserInformation之外(。

  1. 在上面的函数中,我添加了Userinfo x;以表明嵌套类类型可以在没有范围解析运算符的情况下声明和使用。为什么允许这样做

UserInformation::getInfo()class UserInformation的成员函数。在函数体内部,假设有一个附加的(不可见的(参数,该参数可通过this(指向调用函数的实例的指针(访问。

成员函数的作用域涉及其所属类的作用域。这包括嵌入类型以及成员变量和函数,如果不被(例如,由具有相同标识符的局部变量(遮蔽,则这些变量和函数将以(this->(为隐式前缀。

最新更新