宏定義 和 函數模板

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章