【发布时间】:2019-09-11 05:28:24
【问题描述】:
我知道有类似的帖子,但我觉得我的问题足够具体,仍然可以提问。 假设我选择通过将实际定义放入头文件中来构建可执行文件,然后将它们全部包含在单个 cpp 文件中。
如果我理解正确,它的含义只会影响构建过程,即编译和链接,而不会影响运行时性能。是真的吗?
此外,编译时间应该更长,而链接时间应该更低。不应该是这样吗?如果不是这样,编译时间增加真的是没有人构建这样的应用程序的唯一原因吗?
【问题讨论】:
-
实际的问题是您每次都必须重新构建您的整个代码,即使是在对它进行最微小的更改之后。对于可能需要数小时的大型项目(例如,尝试从源代码构建 Clang)。如果您首先构建目标文件或库,那么您只需要重新构建该特定库或二进制文件的文件。
-
与编译相比,链接速度快得惊人,而且两者都比在一个字面上一团糟的项目中工作要快。您的提议与语言和围绕它的工具(包括编译器)的设计目的相反,并且没有任何版本可以正确运行。
-
实际上,它可以对运行时性能产生很大影响,以至于工具链提供了执行此操作的选项(“整个程序优化”),即使在一堆单独的编译单元上调用也是如此。请参阅链接的问题。
-
@BenVoigt 即使这样你也可以使用
#include代替。 -
@Havenard:仅当代码的结构不会在文件范围内发生命名冲突。
标签: c++