#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++的函數模板來實現更安全些。