#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++的函数模板来实现更安全些。