面试题答案
一键面试对于class Derived : public Base<int> { /*... */ };
- 模板实例化:编译器看到
Derived
继承自Base<int>
,会实例化Base
模板类,将模板参数T
替换为int
。 - 类型推导:在
Base
类内部,如果有依赖于模板参数T
的成员函数、成员变量等,它们的类型会根据T
被推导为int
。例如,若Base
类中有一个成员函数void func(T param);
,实例化后变为void func(int param);
。
对于class Derived2 : public Base<MyStruct> { /*... */ };
- 模板实例化:编译器遇到
Derived2
继承自Base<MyStruct>
,会实例化Base
模板类,把模板参数T
替换为MyStruct
。 - 类型推导:与前面类似,
Base
类中依赖于模板参数T
的成员函数、成员变量等,类型会推导为MyStruct
。例如,同样的成员函数void func(T param);
,现在实例化后变为void func(MyStruct param);
。不同之处在于,这里的类型是自定义结构体MyStruct
,相较于int
这样的基本类型,MyStruct
可能有更复杂的结构和行为,在Base
类内部对T
的操作可能涉及结构体成员的访问等操作,而对int
主要是基本的算术和逻辑操作等。