【问题标题】:Is there a difference in doing class Forward Declaration at the definition inside the class and outside the class在类内和类外的定义中做类前向声明​​有区别吗
【发布时间】:2019-12-12 12:29:11
【问题描述】:

示例类B标头:

class A;

class B {
   protected:
   A* Foo;
};

VS

class B {
   protected:
   class A* Foo;
};

这两个类前向声明​​和/或首选哪一个有什么区别?

【问题讨论】:

    标签: c++ forward-declaration


    【解决方案1】:

    没有区别,但第一种方法更可取,因为它使代码更清晰。

    【讨论】:

      【解决方案2】:

      这是elaborate type specifier 的两个示例,它们实现了相同的效果。

      正如 Vlad 在他的回答中提到的,第一个示例(cppreference 上的 (3))是转发声明类型的常用方法,并且可能比其他选项被更多的开发人员理解。

      【讨论】:

        【解决方案3】:

        这两者没有区别,但大多数人更喜欢第一个,因为它使A 的范围很明显。

        请注意,这两者之间存在巨大差异:

        class B {
           class A* Foo;
        };
        
        class C {
           class A;
           A* Foo;
        };
        

        它在C 的范围内声明了一个类A,这与A 中的B 不同。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-05-28
          • 2011-08-25
          • 1970-01-01
          • 1970-01-01
          • 2010-10-06
          • 2011-05-08
          相关资源
          最近更新 更多