为什么未调用的模板类成员未实例化?

Ale*_*Dan 5 c++ templates class

我想知道当我通过指定模板类型参数创建类模板的实例时.
1)为什么非被调用的函数没有得到实例化?.
2)在我尝试使用之前,他们不会被编译?
3)这种行为背后的逻辑是什么?

template <class T>
class cat{
public:

T a;
void show(){
   cout << a[0];
}
void hello(){
   cout << "hello() get called \n";
}
}; 

int main(){
cat<int> ob1; // I know that show() did not get instatiated, otherwise I will get an    error since a is an int
ob1.hello();

 }
Run Code Online (Sandbox Code Playgroud)

Mar*_*som 6

模板不是代码 - 它们是用于制作实际代码的模式.在提供参数之前,模板不完整,因此无法提前创建代码.如果不使用一组特定的模板参数调用函数,则永远不会生成代码.


Meh*_*dad 3

如果他们实例化整个类,那么您可能会得到无效代码。

你并不总是想要这样。

为什么?因为在 C++ 中,很难据我所知,在某些情况下,完全不可能)说“仅当 X、Y 和 Z 为真时才编译此代码”。

例如,你会怎么说“如果嵌入对象可以复制,则只有我的复制构造函数”?据我所知,你不能。

所以他们只是让它们无法编译,除非你实际调用它们。