代码之家  ›  专栏  ›  技术社区  ›  Paul C

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

  •  -1
  • Paul C  · 技术社区  · 15 年前

    假设这个类有一个内部结构。

    class Some {
       public:
        struct Crap{};
        Crap Process(Crap& c);
    }
    
    
    Some::Crap Some::Process(Crap& crap) {   Crap moreCrap = ..  }
    

    我觉得“Process”中的返回类型(Some::Crap)是有作用域的。

    在我看来,在“过程”的主体中不需要范围界定是有道理的。

    我不明白为什么流程的内部结构参数(Crap&Crap) 没有 需要范围界定。

    有人对此有什么见解吗?

    3 回复  |  直到 15 年前
        1
  •  3
  •   James McNellis    15 年前

    实际上,参数类型 必须是合格的(除非你的例子不正确 Process 成为 Some ).

        2
  •  2
  •   André Caron    15 年前

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

    基本上, Crap 不需要在函数参数列表和主体中进行作用域划分,因为您不需要 this->

    需要返回类型的原因很简单,因为解析器在方法名之前遇到了返回类型,并且不能(不需要?)在那一刻推断范围。

        3
  •  0
  •   aschepler    15 年前

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

    成员函数定义的类范围从 ( { . 我假设推理是这样的,这样的东西可以打得更短。