gpt4 book ai didi

c++ - 你只是调用前向声明和原型(prototype)声明 "declarations"吗?

转载 作者:太空宇宙 更新时间:2023-11-04 12:56:38 24 4
gpt4 key购买 nike

我想知道 C++ 中的前向声明和原型(prototype)声明之间有什么区别。然后,我读了 this Angew 声称这两个术语都不存在于 C++ 中,但它们实际上都只是一个声明......但是你如何在不使用“前向声明”的情况下谈论所谓的前向声明?就像我们有这段代码:

class B;
class A{B b;};
class B{A a;}

如果我只是说“出现在 A 之前的 B 的声明”,没有人能真正知道我在谈论一个应该稍后定义的声明。那么我怎样才能更具体地使用正确的声明C++ 术语?

原型(prototype)声明也是如此。与仅仅说声明相比,该术语可以解释更具体的情况。

最佳答案

我会调用:

class B;

您示例中的前向声明。它通知编译器 B 是一个类,这足以以某种方式引用 B,而无需进一步定义 B(目前)。当您需要引用引用您正在声明或定义的类的类时,这可以用作解决头文件之间循环引用的方法。 (在你的例子中,但有时 A 和 B 在不同的头文件中,你不能在 B 头文件中包含 A 而在 A 头文件中包含 B,所以“转发声明”B 解决了这个问题。)

我会将任何没有函数体的函数声明称为“声明”。在头文件中声明函数,并在 cpp 文件中定义它们允许头文件仅包含声明,这些声明足以让头文件的使用者进行编译,而无需头文件中所有完整函数定义的包袱。当头文件中声明和定义混用,并且头文件在一个项目中多次包含时,可能会出现重复定义错误。

我不认为“原型(prototype)声明”真的是一个被使用的术语。我会说“声明”也可以称为“函数原型(prototype)”。这可能更像是一个古老的 C 术语。

关于c++ - 你只是调用前向声明和原型(prototype)声明 "declarations"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46257950/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com