c++中预处理器指令和函数模板的区别

预处理器指令是在编译前处理源代码的程序。在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

(0)
上一篇 2023年2月28日 06:15
下一篇 2023年2月28日 06:15

相关推荐

发表回复

登录后才能评论