iBu*_*Bug 7 c++ templates template-instantiation
假设我有一个像这样定义的模板类
template <typename T>
class Temp{
// irrelevant
};
Run Code Online (Sandbox Code Playgroud)
我可以隐式或显式实例化它:
Temp<int> ti;
template class Temp<char>;
Run Code Online (Sandbox Code Playgroud)
通过显式实例化,我的程序应该包含一个实例,即使我以后不使用它(假设它没有被编译器优化省略).
我的问题是,以下语句是否会导致类的实例化?
typedef Temp<short> TShort;
using TFloat = Temp<float>; // C++11
Run Code Online (Sandbox Code Playgroud)
否。隐式实例化仅在需要完全定义的类型时才发生;而类型别名则不必。
当代码在需要完全定义的类型的上下文中引用模板时,或者当类型的完整性影响代码,并且尚未明确实例化此特定类型时,将发生隐式实例化。例如,在构造此类型的对象时,但在构造指向此类型的指针时不这样。
例如,以下代码需要完全定义的类型,
Temp<char> tc;
new Temp<char>;
sizeof(Temp<char>);
Run Code Online (Sandbox Code Playgroud)
而
Temp<char>* ptc;
Run Code Online (Sandbox Code Playgroud)
没有。
| 归档时间: |
|
| 查看次数: |
346 次 |
| 最近记录: |