使用c++模板的程序编译过程

Compilation process of programs using C++ templates

本文关键字:程序 编译 过程 c++ 使用      更新时间:2023-10-16

假设为了相同的目的编写了以下代码。程序的其余代码是相同的。
code1

#include <vector>
using namespace std;
vector<int> vector1;
vector<int> vector2;
vector<int> vector3;
vector<int> vector4;

code2

 #include <vector>
using namespace std;
vector<int> vector1;
vector<short> vector2;
vector<char> vector3;
vector<bool> vector4;

现在哪一个更好(让在可执行的大小方面)?(提示:考虑可执行文件)

我比较了g++ -S给出的汇编结果。
令人惊讶的是,第二个程序的行数是1778行,第一个程序是630行。这意味着第一个更好。
为了解释这种行为,我寻找了一个很好的资源来了解"基于模板的程序是如何编译的",但是我找不到。

使用模板的程序如何被编译器编译成程序集?你有好的资源吗?(这不是作业,而是我工作单位给我的一个自习题。如果你觉得不能给出答案,至少告诉我一个好的资源)

您发现的行为一点也不奇怪。编译器使用模板生成任意数量的类。在第一个示例中,它只需要生成一个(vector<int>),而在第二个示例中,它需要生成四个。当然,这会生成更多的代码。

至于哪一个更好的问题:当然是更好地服务于其目的的那个。但只有你自己知道。