#include<iostream>
using namespace std;
#define max(a,b) (((a)>(b)? (a):(b)))
int main()
{
int a=10;
int b=0;
int c=max(++a,++b);
cout<<"a:"<<a<<" b:"<<b<<" c:"<<c<<endl;
return 0;
}
输出:
a:12, b:1, c:12
#include<iostream>
using namespace std;
template<typename T>
T getMax(const T& a, const T& b)
{
return a>b?a:b;
}
int main()
{
int a=10;
int b=0;
int c=getMax(++a,++b);
cout<<"a:"<<a<<" b:"<<b<<" c:"<<c<<endl;
return 0;
}
输出:
a:11, b:1, c:11
宏替换使得(++a)被运算两次,也就产生了错的结果,而函数模板中参数只被计算一次,避免了这种情况。
利用宏定义实现函数的模板是不安全的,但是它效率高些。
利用C++的函数模板来实现更安全些。
转载于:https://blog.51cto.com/coolbreezex/1333837