gpt4 book ai didi

c++ - 不必要的包含文件是开销吗?

转载 作者:IT老高 更新时间:2023-10-28 13:00:30 24 4
gpt4 key购买 nike

我看到了几个关于如何在 C++ 项目中检测不必要的#include 文件的问题。这个问题经常引起我的兴趣,但我一直没有找到满意的答案。

如果包含了一些头文件,而这些头文件没有在 c++ 项目中使用,那会是开销吗?我理解这意味着在编译之前,所有头文件的内容都会被复制到包含的源文件中,这会导致很多不必要的编译。

这种开销在编译后的目标文件和二进制文件中传播到什么程度?

Aren't compilers able to do some optimizations to make sure that this kind of overhead is not transferred to the resulting object files and binaries ?

考虑到我可能对编译器优化一无所知,我仍然想问这个,以防有答案。

As a programmer who uses a wide variety of c++ libraries for his work, what kind of programming practices should I follow to keep avoiding such overheads ? Is making myself intimately familiar with each library's working the only way out ?

最佳答案

它不会影响二进制文件的性能,甚至不会影响二进制文件的内容,几乎适用于所有头文件。 声明根本不生成任何代码,如果不使用内联/静态/匿名命名空间定义,它们会被优化掉,并且任何标题都不应该包含外部可见的定义(如果标题包含在更多一个翻译单元)。

作为@T.C.指出,异常是具有非平凡构造函数的内部可见静态对象。例如,iostream 就是这样做的。程序必须像调用构造函数一样运行,而编译器通常没有足够的信息来优化构造函数。

但是,它确实会影响编译需要多长时间以及在更改 header 时将重新编译多少文件。对于大型项目,这足以激励去关心不必要的包含。

关于c++ - 不必要的包含文件是开销吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30062502/

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