假设我有一个像这样定义的模板类
template <typename T>
class Temp{
// irrelevant
};
我可以隐式或显式地实例化它:
Temp<int> ti;
template class Temp<char>;
通过显式实例化,即使我以后不使用它,我的程序也应该包含一个实例(假设它没有被编译器优化省略)。
我的问题是,以下语句是否会导致类的实例化?
typedef Temp<short> TShort;
using TFloat = Temp<float>; // C++11
答案 0 :(得分:4)
没有。只有在需要完全定义的类型时才会出现Implicit instantiation;虽然类型别名不必。
当代码引用需要完全定义类型的上下文中的模板时,或者当类型的完整性影响代码,并且尚未显式实例化此特定类型时,将发生隐式实例化。例如,构造此类型的对象时,而不是构造指向此类型的指针时。
e.g。以下代码需要completely defined type,
Temp<char> tc;
new Temp<char>;
sizeof(Temp<char>);
而
Temp<char>* ptc;
没有按&#39;吨