语法区别
- 声明:
- 函数模板声明仅提供函数模板的原型,告知编译器函数模板的存在及其参数和返回值类型等信息。
- 语法格式为:
template <typename T> return_type function_name(T parameter);
例如:template <typename T> T add(T a, T b);
- 定义:
- 函数模板定义除了包含声明的信息外,还给出了函数模板具体的实现代码。
- 语法格式为:
template <typename T> return_type function_name(T parameter) { /* 函数体 */ }
例如:
template <typename T>
T add(T a, T b) {
return a + b;
}
作用区别
- 声明:
- 声明的主要作用是让编译器知道存在这样一个函数模板,在调用函数模板时编译器可以进行参数类型检查等前期工作。比如在一个源文件中,先声明函数模板,在后续代码中就可以调用它,编译器依据声明进行初步的语法和类型检查。
- 定义:
- 定义提供了函数模板的实际逻辑实现,只有定义了函数模板,编译器才能在实例化时生成具体的函数代码。例如上述
add
函数模板的定义,当编译器遇到add<int>(1, 2)
这样的调用时,会根据这个定义实例化出针对int
类型的add
函数代码。