#ifndef max
#define max(a,b) (((a) > (b)) ? (a) : (b))
#endif
#ifndef min
#define min(a,b) (((a) < (b)) ? (a) : (b))
#endif
這會造成命名的衝突以及使用上的問題,例如我假設要使用stl的numeric_limits來取得double的最大值
#include
#include
using namespace std;
void main()
{
double maxValue = numeric_limits::max(); // 錯誤,因為max是一個macro,會先被preprocessor處理
cout << maxValue;
}
解決方法:
只要在#include WinDef.h之前,#define NOMINMAX或是在專案設定的Preprocessor裡輸入NOMINMAX就可以關閉max, min macro了
-----------------------------
有太多的C++書籍呼籲你不要再使用#define來定義function了,而是改用inline等方式
2 則留言:
另外一個方法:
using namespace std;
const string a("qwert");
const string b("abcde");
string c = (min)(a, b);
string d = (max)(a, b);
嗯.. 避開巨集的快速好用的方法.. :)
3QQQ
張貼留言