gpt4 book ai didi

c++ - 关于 CPP 文件和 header

转载 作者:行者123 更新时间:2023-11-28 05:46:03 26 4
gpt4 key购买 nike

我现在正在学习 C++。这是我的问题:其他人是否可以使用我们定义的任何类成员函数,即使他们没有我们的 cpp 文件?详细的回答会更好。谢谢。

最佳答案

如果代码确实存储在文件中,C++ 语言标准没有说明代码如何或应该如何物理分布在文件中。

特别是标准库头文件不一定是物理文件,即使大多数实现将这些头文件作为文件提供也是如此。

实现文件和头文件是一种约定,但仅此而已,用于代码的物理包装,头文件设计用于通过预处理器#include 指令包含,实现文件设计用于单独编译。因此,通常一个实现文件(如 .cpp 文件)对应于标准中的一个翻译单元。但在某些情况下,会使用其他物理源代码打包思想,例如旨在包含在其他实现文件中的实现文件。

函数的实现可以放在实现文件或头文件中,或者例如在数据库中,标准不关心。然而,由于源代码文件的使用方式,如果实现放在头文件中,而不是模板,那么它应该是 inline 以便它可以出现在两个或包含该 header 的更多翻译单元。如果 implementation-in-a-header 直接在类定义中,那么它会自动 inline,否则需要显式声明 inline

现在,如果用户有实现源代码,那么该功能大概可以使用。

同样,如果用户有函数声明加上合适的编译版本,那么同样可以使用。

如果用户没有实现的源代码或编译版本,则无法使用。

因此,这与文件没有太大关系。但是有一个方面是你是否可以在没有实现文件的情况下分发代码。正如上面所讨论的,是的,你可以,这通常被称为仅 header 模块

主要是,仅 header 模块可以完成普通单独编译代码可以做的所有事情,但有一个异常(exception):它们不能提供“编译器防火墙”来包含 header 提供的符号。

这会导致两个主要问题:(1) 命名空间污染,以及 (2) 无法提供(无需重写和笨拙的解决方案)两个实现依赖于彼此声明的模块。

然而,许多代码作为仅 header 模块分发。特别是 Boost 库的大部分都是仅包含头文件的模块。主要优点是使用这些部分没有复杂的构建库或安装使用不同选项构建的单独编译代码等。

关于c++ - 关于 CPP 文件和 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36185960/

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