MST

星途 面试题库

面试题:C++函数模板声明与定义的基础差异

请简述C++函数模板声明和定义在语法和作用上有哪些主要区别,并举例说明。
16.7万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

语法区别

  1. 声明
    • 函数模板声明仅提供函数模板的原型,告知编译器函数模板的存在及其参数和返回值类型等信息。
    • 语法格式为:template <typename T> return_type function_name(T parameter); 例如:template <typename T> T add(T a, T b);
  2. 定义
    • 函数模板定义除了包含声明的信息外,还给出了函数模板具体的实现代码。
    • 语法格式为:template <typename T> return_type function_name(T parameter) { /* 函数体 */ } 例如:
template <typename T>
T add(T a, T b) {
    return a + b;
}

作用区别

  1. 声明
    • 声明的主要作用是让编译器知道存在这样一个函数模板,在调用函数模板时编译器可以进行参数类型检查等前期工作。比如在一个源文件中,先声明函数模板,在后续代码中就可以调用它,编译器依据声明进行初步的语法和类型检查。
  2. 定义
    • 定义提供了函数模板的实际逻辑实现,只有定义了函数模板,编译器才能在实例化时生成具体的函数代码。例如上述add函数模板的定义,当编译器遇到add<int>(1, 2)这样的调用时,会根据这个定义实例化出针对int类型的add函数代码。