预处理器指令是在编译前处理源代码的程序。在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 有明确的完全专业化 没有明确的完全专业化

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

欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果。
转载请注明:文章转载自 有区别网 [http://www.vsdiffer.com]
本文标题:c++中预处理器指令和函数模板的区别
本文链接:https://www.vsdiffer.com/vs/difference-between-preprocessor-directives-and-function-templates-in-c.html
免责声明:以上内容仅代表 个人看法、理解、学习笔记、总结和研究收藏。不保证其正确性,因使用而带来的风险与本站无关!如本网站内容冒犯了您的权益,请联系站长,邮箱: ,我们核实并会尽快处理。

相关主题

随机