实例化局部变量的模板

时间:2015-06-05 12:43:29

标签: c++

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

e.g。

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
}

1 个答案:

答案 0 :(得分:0)

是的,它是实例化的。

#include <iostream>

template<typename T>
class MyClass {
    public:

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

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

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