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

时间:2013-01-03 11:53:22

标签: c++ templates

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

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

码2

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

现在哪个更好(就可执行文件大小而言)? (提示:考虑可执行文件)

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

如何使用模板的程序由编译器编译到程序集中?你有很好的资源吗? (这不是作业,而是在我的工作场所给出的自学问题。你是否觉得不能给出答案,至少指导我一个好的资源)

1 个答案:

答案 0 :(得分:7)

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

关于哪一个更好的问题:当然,更好地服务于其目的的问题。但只有你能够知道这一点。