1

我想知道模板代码的代码大小。请考虑以下代码

template<typename T>
class vector
{
public:

 vector(size_t size) :
 {
     array = new T[size];
 }


 uint32_t push_back(T value)
 {
  ... adding value to array and possible array realloction..  
 }

private:
 T * array;
}

当我有两个向量实例时,

vector<float> v1;
vector<int> v2;

它会被编译成具有两个push_back实现的二进制文件吗

push_back(float)
push_back(int)

还是只有一个,还是别的什么?

是否可以使用模板来减少代码大小,而不是为floatint向量创建单独的类?

4

1 回答 1

0

从模板实例化的类和函数在运行时它们之间没有任何关系,因此函数将被复制。

一些编译器会优化掉共享/重复代码,但这种优化的范围比模板实例更广。

请注意,即使代码看起来相同,当使用某些运算符时,它也可能会触发不同的函数调用。

std::vector<int*>这对于和之类的指针容器尤其明显,std::vector<char*>尽管它们的行为实际上是相同的,但您将获得两者的不同功能。

总而言之,模板在减少代码大小方面非常出色,但创建许多不同的实例会使您的二进制文件膨胀。

于 2017-12-18T12:08:59.977 回答