typedef和using会导致模板实例化吗?

时间:2017-10-05 03:12:42

标签: c++ templates template-instantiation

假设我有一个像这样定义的模板类

template <typename T>
class Temp{
    // irrelevant
};

我可以隐式或显式地实例化它:

Temp<int> ti;
template class Temp<char>;

通过显式实例化,即使我以后不使用它,我的程序也应该包含一个实例(假设它没有被编译器优化省略)。

我的问题是,以下语句是否会导致类的实例化?

typedef Temp<short> TShort;
using TFloat = Temp<float>; // C++11

1 个答案:

答案 0 :(得分:4)

没有。只有在需要完全定义的类型时才会出现Implicit instantiation;虽然类型别名不必。

  

当代码引用需要完全定义类型的上下文中的模板时,或者当类型的完整性影响代码,并且尚未显式实例化此特定类型时,将发生隐式实例化。例如,构造此类型的对象时,而不是构造指向此类型的指针时。

e.g。以下代码需要completely defined type

Temp<char> tc;
new Temp<char>;
sizeof(Temp<char>);

Temp<char>* ptc;

没有按&#39;吨