我想知道C ++中前向声明和原型声明之间的区别是什么。然后,我读了this,Angew声称C ++中没有这两个术语存在,但它们都只是一个声明......但是你怎么会在不使用“前进”的情况下谈论另外被称为前向声明的内容宣言”?就像我们有这个代码一样:
class B;
class A{B b;};
class B{A a;}
如果我只是说“出现在A之前的B的声明”,没有人能够真正知道我正在谈论一个应该在以后定义的声明。那么我怎么能更正确地使用正确的声明呢? C ++术语?
原型声明也是如此。与仅仅说明声明相比,这个术语可以解释更具体的情况。
答案 0 :(得分:0)
我会打电话:
class B;
示例中的前向声明。它通知编译器B是一个类,它足以在某些方面引用B,而不进一步定义B(此刻)。当您需要引用引用您声明或定义的类的类时,这可以用作解决头文件之间的循环引用的方法。 (如在您的示例中,但有时A和B在不同的头文件中,并且您不能在B标头中包含A而在A标头中包含B,因此'前向声明' B解决此问题问题。)
我会在没有函数体的情况下调用任何函数声明'声明'。在头文件中声明函数并在cpp文件中定义它们允许头文件仅包含声明,这对于头文件的使用者来说是足够的信息来编译,而没有头文件中所有完整函数定义的包袱。在头文件中混合声明和定义,并且在项目中多次包含标头时,可能会出现重复的定义错误。
我不认为'原型宣言'实际上是一个使用的术语。我会说这是一个声明'也可称为功能原型'。这可能更像是旧的C术语。