C++ 模板 - 代码使用、二进制大小
C++ Templates - code usage, size of binary
我想知道模板代码的代码大小。
请考虑以下代码
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)
或者只有一个,还是其他?
是否可以使用模板减少代码大小,而不是为 float
和 int
向量创建单独的 类?
类和从模板实例化的函数在运行时它们之间没有任何关系,因此函数将被复制。
一些编译器会优化掉 shared/duplicate 代码,但这种优化的范围比模板实例更广泛。
请注意,即使代码看起来相同,但在使用某些运算符时可能会触发不同的函数调用。
这对于像 std::vector<int*>
和 std::vector<char*>
这样的指针容器尤其明显,尽管它们的行为实际上是相同的,但您将获得不同的函数。
总而言之,模板在减少代码大小方面表现出色,但创建许多不同的实例会使您的二进制文件膨胀。
我想知道模板代码的代码大小。 请考虑以下代码
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)
或者只有一个,还是其他?
是否可以使用模板减少代码大小,而不是为 float
和 int
向量创建单独的 类?
类和从模板实例化的函数在运行时它们之间没有任何关系,因此函数将被复制。
一些编译器会优化掉 shared/duplicate 代码,但这种优化的范围比模板实例更广泛。
请注意,即使代码看起来相同,但在使用某些运算符时可能会触发不同的函数调用。
这对于像 std::vector<int*>
和 std::vector<char*>
这样的指针容器尤其明显,尽管它们的行为实际上是相同的,但您将获得不同的函数。
总而言之,模板在减少代码大小方面表现出色,但创建许多不同的实例会使您的二进制文件膨胀。