MST

星途 面试题库

面试题:C++类模板实例化的基础问题

请描述C++类模板实例化的两种主要方式,并举例说明。同时,解释在实例化过程中编译器会进行哪些检查。
16.5万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

类模板实例化的两种主要方式

  1. 显式实例化:程序员明确指定模板参数,告诉编译器生成特定类型的模板实例。 示例:
template <typename T>
class MyClass {
public:
    T data;
    MyClass(T value) : data(value) {}
};

// 显式实例化
MyClass<int> myIntObj(10); 
  1. 隐式实例化:编译器根据使用模板的上下文,自动推断出需要实例化的模板类型。 示例:
template <typename T>
class MyClass {
public:
    T data;
    MyClass(T value) : data(value) {}
};

void func() {
    MyClass obj(20.5); // 隐式实例化,T被推断为double
}

实例化过程中编译器的检查

  1. 语法检查:检查模板定义中的语法是否正确,如函数声明、语句结构等。例如在上述MyClass模板中,检查MyClass(T value) : data(value) {}构造函数的语法是否正确。
  2. 类型检查:检查模板参数在模板定义中的使用是否合法。比如在MyClass中,T类型是否支持模板中对它进行的操作,如MyClass(T value)构造函数中T类型要支持赋值操作。
  3. 模板参数匹配检查:在显式实例化时,检查所提供的模板参数是否与模板定义中的参数列表匹配。例如MyClass<int> myIntObj(10);,检查int是否符合MyClass模板对模板参数T的要求。