c ++范围奇怪 - 为什么成员函数的内部类型参数不需要作用域?

时间:2010-11-01 17:48:06

标签: c++ member scoping

假设我们给了这个带有内部结构的类。

class Some {
   public:
    struct Crap{};
    Crap Process(Crap& c);
}


Some::Crap Some::Process(Crap& crap) {   Crap moreCrap = ..  }

对我来说,“Process”中的返回类型(Some :: Crap)是作用域的。

对我来说,在“过程”的主体内部不需要确定范围是有道理的。

我不明白为什么Process(Crap& crap)的内部struct参数不需要作用域。

有没有人对此有任何见解? 感谢

3 个答案:

答案 0 :(得分:3)

实际上,参数类型 需要被限定(除非您的示例不正确,并且您打算Process成为Some的成员函数。)< / p>

答案 1 :(得分:2)

假设以下代码段:

class Some
{
public:
    struct Crap{};
    Crap Process(Crap&);
};

Some::Crap Some::Process(Crap& crap) { ... }

基本上,Crap不需要在函数参数列表和正文中使用作用域,原因与您不需要this->访问数据成员和成员函数的原因相同:它是隐式的,因为它位于相同的范围。

需要返回类型的原因仅仅是因为解析器在方法名称之前遇到返回类型,并且在那时不能(不要求?)推断范围。

答案 2 :(得分:0)

问题标题显示'成员函数',但您的示例不包含成员函数。假设您的意思是Some::Process,而不仅仅是Process

成员函数定义的类范围从(开始,而不是{。我认为推理完全是这样的,这样的东西可以缩短。