在C++中返回成员类

szp*_*zyk 7 c++ types

在以下示例中:

class A
{
public:
    class B
    {
        ...
    }
    B Method(B argument);
}

A::B A::Method(B argument);
Run Code Online (Sandbox Code Playgroud)

为什么返回类型需要范围,而不是参数类型?

Bri*_*ian 8

根据[basic.lookup.qual]/3,

在声明中,该声明符-ID是一个合格的-ID,在之前使用的名称合格-ID被宣布在定义命名空间范围中查找; 在成员的类或命名空间的范围内查找qualified-id后面的名称.

返回类型在声明qualified-id之前(即,A::Method),而参数类型在它之后,因此参数类型的名称会在范围内自动查找A,而返回类型的名称则不会.我们可以使用尾随返回类型来避免额外限定.

auto A::Method(B argument) -> B;
Run Code Online (Sandbox Code Playgroud)

  • 我是唯一一个为了获得它而不得不慢慢阅读标准报价10倍的人吗? (3认同)
  • 是的,你确实为我节省了额外的20个读数 (3认同)