2015-06-05 188 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對象被實例化。