gpt4 book ai didi

c++ - 在预编译头文件中实例化模板会减少编译时间吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:13:46 29 4
gpt4 key购买 nike

例子:假设我在我的预编译头文件中包含:

#include <vector>

由于 vector 的一些实例,例如 std::vector、std::vector 等在我的项目中经常使用,如果我像这样在预编译头文件中实例化它们是否会减少编译时间:

#include <vector>
template class std::vector<float>;
template class std::vector<int>;

更进一步,将虚拟函数添加到使用一些函数的预编译头是否有意义:

namespace pch_detail {
inline auto func() {
auto&& v = std::vector<float>{};
v.size();
v.begin();
v.front();
}
}

我非常不确定翻译单元和模板是如何工作的,所以在我看来,如果我在预编译头文件中实例化它们,这应该意味着它们不需要为每个 .cpp 文件实例化。

更新

使用 Visual Studio 2017 和一些常用模板类的实例在真实代码库上进行了测试。

  1. 实例化通用模板类:71731 毫秒
  2. 没有实例化:68544 毫秒

因此,至少就我而言,它花费了更多时间。

最佳答案

是的,它可以有所作为。

然后,翻译单元中的实例化可以利用预编译 header 中的数据,并且编译器可以比 C++ 标准库 header 更快地读取它。

但是您必须维护一个实例化列表,因此这种编译时优化可能比它的值(value)更麻烦 - 如果您拥有不再需要的实例化,您的想法最终可能会产生相反的效果。

关于c++ - 在预编译头文件中实例化模板会减少编译时间吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45370039/

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