预处理器指令是在编译前处理源代码的程序。在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
免责声明:以上内容仅代表 个人看法、理解、学习笔记、总结和研究收藏。不保证其正确性,因使用而带来的风险与本站无关!如本网站内容冒犯了您的权益,请联系站长,邮箱: ,我们核实并会尽快处理。
相关主题
- C++ 11、C++ 14和C++ 17的区别
- C++ map与unordered_map的区别
- C++ set 与 unordered_set的区别
- C++ std::set 和std::vector 的区别
- C++ std::set和std::list的区别
- C++ STL中Multiset和Multimap的区别
- C++ 中的 std::next 与 std::advance 的区别
- C++中 cout 和std::cout的区别
- C++中Const和Regular迭代器的对比及其示例
- C++中关系运算符(==)和std :: string :: compare()的区别
- C++中内联函数和普通函数的区别
- C++中的浅拷贝和深拷贝的区别