预处理器指令是在编译前处理源代码的程序。在C/C++中编写程序和执行程序之间有许多步骤。
下面的程序说明了函数模板的功能:
#include <bits/stdc++.h>
#define min(a, b) ((a < b) ? a : b)
using namespace std;
// Driver code
int main()
{
int a = 2, b = 4;
cout << "Minimum of both is: " << min(a, b);
return 0;
}
运行结果:
Minimum of both is: 2
函数模板
函数模板是可以处理不同数据类型的通用函数,不需要任何单独的代码。下面的程序说明了函数模板的功能:
#include <iostream>
#include <stdio.h>
using namespace std;
// Function Template
template <class T>
T Min(T x, T y)
{
return (x < y) ? x : y;
}
// Driver Code
int main()
{
int a = 4, b = 8;
cout << "Minimum of both is: " << min(a, b);
return 0;
}
函数模板用于制作通用函数,可以与任何数据类型一起工作。例如,用于计算任何类型的2个值的最小值的函数模板可以定义为:
template <class T>
T minimum(T a, T b)
{
return (a < b) ? a : b;
}
但是,这个任务也可以使用使用预处理指令#define
创建的预先处理指令来执行。所以,两个数的最小值可以定义为:
#define minimum(a, b) ((a < b) ? a : b)
预先处理指令也可以通过使用以下语句来实现:
minimum(30, 35);
minimum(30.5, 40.5);
以下是两者之间的表格差异:
序号 | 预处理器指令 | 函数模板 |
---|---|---|
1 | 没有类型检查 | 有完整的类型检查 |
2 | 它们被预处理 | 它们被编译 |
3 | 它们可以处理任何数据类型 | 它们与#define 预处理器指令一起使用 |
4 | 它们可能会导致意外结果 | 不会获得这种意外结果。 |
5 | 不确保实例中的类型安全 | 确实确保类型安全 |
6 | 有明确的完全专业化 | 没有明确的完全专业化 |
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/294729.html