C / C ++转发声明与Include

Vla*_*adp 1 c++ header include forward-declaration

当您包含一些文件时发生了什么,而当您向前声明某些函数/类时发生了什么?如果两个文件包含相同文件,则第一个文件将成功读取所有功能,第二个文件将失败,但仍能够使用这些功能?

当我向前声明一些功能时会发生什么?该功能现在“保存”了吗,我可以在任何地方使用它,或者仅在同一文件中知道它?那为什么两个带有include(到带有守卫的文件)的文件将起作用?

我可以将所有内容都包含在主体中而不再打扰吗?

编辑:

以及为什么cpp文件应包含其标题?如果我不包括这些怎么办?

K-b*_*llo 5

当您包含一些文件时发生了什么,而当您向前声明某些函数/类时发生了什么?

包含文件时,预处理器会将其内容“复制并粘贴”到包含源中。当您向前声明一个函数/类时,您是在声明一个不完整的类型,让翻译单元的其余部分知道存在具有该名称的函数/类,并使其在允许不完整声明的上下文中可用。

如果两个文件包含相同文件,则第一个文件将成功读取所有功能,第二个文件将失败,但仍能够使用这些功能?

如果包含文件包含适当的包含保护,则同一翻译单元中的第二个包含实际上将是无操作的。如果两个不同的源文件包含相同的头文件,则全部内容将包含在两个文件中。

当我向前声明一些功能时会发生什么?该功能现在“保存”了吗,我可以在任何地方使用它,或者仅在同一文件中知道它?那为什么两个带有include(到带有守卫的文件)的文件将起作用?

该函数只能在包含前向声明的转换单元中使用。通常,每个源文件(.cpp)是一个不同的转换单元,宏定义(标头保护符的那些)以及声明/定义在该转换单元内有效。标头保护符可防止同一头文件在同一转换单元中被多次包含,以防止出现多个声明错误。