基本概念
宏在C++中使用内联函数和函数模板实现,但是C中的#define也可以实现宏。
预处理指令#define:如 #define BIG 512
C中的宏函数:如 #define TWICE (x) ( (x) * 2)
注意其中必须要写小括号
宏函数的优点:
1.可以做成通用类型,且无视返回类型;
2.运行速度很快
随之带来的缺点:没有进行类型检查。
为了解决这个缺点,C++内置了函数模板和内联函数,来代替宏的功能
函数模板: 关键字== template且无视返回类型==用于写那些功能雷同但是由于返回类型未知而做大量重复工作的函数。
内联函数:关键字inline,就地展开就地执行,无调用和返回,用来代替宏函数,但是也要定义很多个(受返回类型的限制)
内联模板函数:集大成者,完美替代品。
如:
template< TYPENAME T>
inline T max_it(const T&a, const T&b)
示例代码
#include <iostream>
#define BIG 512 //宏,一般全大写
#define TWICE(x) ((x) * 2) //小括号要写
#define MAX(x, y) ((x) > (y) ? (x) : (y))
#define MIN(x, y) ((x) < (y) ? (x) : (y))
#define SQUARE(x) (x) * (x)
using namespace std;
int max_int(int a, int b)
{
return a > b ? a : b;
}
double max_double(double x, double y)
{
return x > y ? x : y;
}
template<typename T> //函数模板
T max_t(const T& a, const T& b)
{
return a > b ? a : b;
}
inline int i_max_int(int a, int b) //内联函数
{
return a > b ? a : b;
}
inline double i_max_int(double x, double y)
{
return x > y ? x : y;
}
template<typename T> //内联函数模板
inline T max_it(const T&a, const T&b)
{
return a > b ? a : b;
}
int main()
{
int myArray[BIG];
cout << max_int(12, 98) << endl;
cout << max_double(12.5, 9.8) << endl;
cout << MAX(12.5, 9.8) << endl;
cout << max_t(12, 9) << endl;
cout << max_t(2.2, 2.22) << endl;
cout << i_max_int(5,6) << endl;
cout << max_it(88,99) << endl;
cout << max_it(3.14, 3.5) << endl;
cout << TWICE(4) << endl;
cout << MAX(12, 9) << endl;
cout << MIN(12, 9) << endl;
cout << SQUARE(5) << endl;
cout << SQUARE(6+1) << endl; //如果无括号会出现错误,等价于6+1*6+1=13,所以应该加上小括号
return 0;
}