在以下示例中:
class A
{
public:
class B
{
...
}
B Method(B argument);
}
A::B A::Method(B argument);
为什么返回类型需要范围,而不是参数类型?
答案 0 :(得分:8)
根据[basic.lookup.qual] / 3,
在 declarator-id 是 qualified-id 的声明中,声明 qualified-id 之前使用的名称 在定义的命名空间范围中查找;在范围内查找 qualified-id 后面的名称 成员的类或命名空间。
返回类型在声明 qualified-id 之前(即A::Method
),而参数类型在它之后,因此参数类型的名称是自动的在A
的范围内查找,而返回类型的名称则没有。我们可以使用尾随返回类型来避免额外的限定。
auto A::Method(B argument) -> B;