【发布时间】:2019-09-17 09:50:14
【问题描述】:
不同 C++ 功能的编译时间是多少?我有兴趣选择正确的方法在我的库头文件中实现一些通用代码,并且我想考虑库用户的编译时间。粗略的和/或相对的数字就可以了。
我对以下案例特别感兴趣:
- 添加类专业化
- 添加 constexpr 函数(仅限声明)
- 添加最简单的 constexpr 函数(如
{ return true; }) - 在编译时执行最简单的 constexpr 函数。
- 实例化类模板
- 实例化模板别名
- 实例化变量模板
- 找到正确的模板类专业化
- 通过 ADL 找到正确的函数
附:请不要谈论我进行过早的优化。无论如何,C++ 开发人员都会对有关编译时间的信息感兴趣。
更新:澄清我正在优化的代码位于库头文件中,因此它的编译时间对库用户来说绝对重要。
更新:改写了问题,以免引发固执己见的答案。
【问题讨论】:
-
编译器时间取决于实际编译器、它的版本以及传递给它的选项(如优化标志)。通常编译发生一次(除非您正在开发它的库),而它经常被使用。因此,对于您的库的用户而言,编译时间可能在他们的优先级列表中非常低。
-
@oliora 也许您还应该查看 Chiel 规则,了解您列出的某些内容的编译时间成本。
-
@Someprogrammerdude 是的,但是如果代码库的接口中公开了代码,那么它将被包含在多个翻译单元中并(重新)编译。
-
IMO,这个问题有一些技术答案,完全在 SO 的范围内。
-
@MaximEgorushkin 哦,好吧。我会在 Reddit 上这样做。在荷兰填写纳税申报单比问任何关于 SO 的简单问题都容易。
标签: c++ templates compilation compiler-optimization constexpr