1. 程式人生 > >有關max(A,B)與min(A,B)函式的使用

有關max(A,B)與min(A,B)函式的使用

有關max(A,B)與min(A,B)函式在VS2013裡的使用

這兩個函式在標頭檔案<algorithm>裡,會返回A與B裡比較小/大的一個。

不可以改為_MIN與_MAX。查閱得知在Windows工程裡可以這樣替換

網址:https://zhidao.baidu.com/question/135498020.html

關於在LInux與VC6裡的使用,複製一篇CSDN裡的帖子答案

首先,max()在標準C++中的確是個函式而非巨集.它在不同編譯系統中的實際定義如下:
===========================================================
linux 下的 g++,標頭檔案<algorithm>


template <class _Tp>
inline const _Tp& max(const _Tp& __a, const _Tp& __b) {
  return  __a < __b ? __b : __a;
}
===========================================================
windows 下的 VC6,標頭檔案<algorithm> (最新的VS.net沒試過,不敢妄言)
template<class _Ty> inline
const _Ty& _cpp_max(const _Ty& _X, const _Ty& _Y)

{return (_X < _Y ? _Y : _X); }
===========================================================

看到了嗎? g++按照標準C++的規定把它定義為max();而VC6自作主張把它變成了_cpp_max().
事實上,我提問時所附的原始碼是符合標準C++規則的,在g++下順利編譯,而由於VC6把max()變成_cpp_max(),導致無法編譯.

要在VC6用max(),只能退而求其次使用_cpp_max().或_MAX().
因為在標頭檔案algorithm包含的另一個頭檔案xutility裡有一句 #define _MAX _cpp_max


另外有一個相關的巨集__max, 是定義在stdlib.h中的:#define __max(a,b) (((a) > (b)) ? (a) : (b)),不過__max不是標準C++,是以前的C留下來的.