在C++中返回成员类

7
在以下示例中:
class A
{
public:
    class B
    {
        ...
    }
    B Method(B argument);
}

A::B A::Method(B argument);

为什么对于返回类型而言需要范围,而对于参数类型则不需要呢?
1个回答

8
根据[basic.lookup.qual]/3,
在声明中,如果declarator-id是qualified-id,则在定义的命名空间作用域中查找在qualified-id之前使用的名称;在成员类或命名空间的作用域中查找qualified-id之后的名称。
返回类型出现在被声明的qualified-id之前(即A::Method),而参数类型出现在其后,因此参数类型的名称会自动在A的作用域中查找,而返回类型的名称不会。我们可以使用尾随返回类型来避免额外的限定。
auto A::Method(B argument) -> B;

3
我是唯一一个需要慢慢读10遍才能理解标准引语的人吗? - user
@user 我意识到如果你不熟悉这个词汇,阅读起来可能并不容易。这就是为什么我在下面进行了解释。 - Brian Bi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接