2015-06-05 148 views
1

如果定义了该类型的本地自动变量,是否会实例化模板?实例化局部变量的模板

例如

template<typename T> class MyClass { 
}; 

int main() { 
    MyClass<int> var; // Does this cause instantiation? 
} 

编辑:

为什么我问这是下面的代码的原因:

template<typename T> class get_false { public: 
    static constexpr bool val = false; 
}; 

template<typename T> 
class MyClass_2 { 
    static_assert(get_false<T>::val, "Failure"); 
}; 

template<typename T, typename U = MyClass_2<T>> 
class MyClass {}; 

int main() { 
    MyClass<bool> obj; // I suppose this isn't instantiated 
} 
+0

你能解释为什么你认为它可能没有被实例化吗?好奇你的推理。 – Borgleader

+0

@Albert它被实例化。 –

+0

添加了我的推理。这会让问题变得更加冗长,但我同意这可以更好地解释我的疑惑。 – Albert

回答

0

是的,它被实例化。

#include <iostream> 

template<typename T> 
class MyClass { 
    public: 

    MyClass() { 
     std::cout << "instantiated" << std::endl; 
    } 
}; 

int main() { 
    MyClass<int> var; 
} 

该程序输出 “实例化”   ⇒  的MyClass构造函数被调用  ⇒  的var对象被实例化。