当我的C++代码使用min()或max()函数时,我看到一些奇怪的错误。我正在使用Visual C++编译器。
检查你的代码是否包含 windows.h 头文件,并且你的代码或其他第三方头文件中是否有自己的 min()/max() 定义。如果是,则在你的 windows.h 引用之前添加一个 NOMINMAX 的定义,像这样:
#define NOMINMAX
#include <windows.h>
由于Windows将此定义为函数式宏,因此可以使用以下解决方法:
int i = std::min<int>(3,5);
min()
只有在后面跟着(
时才会被扩展,而不是跟着<
。可能还有一种可能是来自副作用。大多数最小/最大宏将多次包含参数,可能不会产生您预期的结果。也可能会生成错误和警告。
max(a,i++)展开为((a) > (i++) ? (a) : (i++))
之后i要么加1要么加2。
std::min()
,std::max()
。我已经好几年没用它了,但是从记忆中boost也会分配最小值和最大值,可能吧?
#define min(a,b) ((a) < (b) ? (a) : (b))
#define max(a,b) ((a) >= (b) ? (a) : (b))
using std::swap
,当你能做得比默认更好时,编写自己的 swap。在C语言中,至少要编写 #define min(a,b) ((a) < (b) ? (a) : (b))
,并确保不要对具有副作用的任何内容进行调用,因为这会导致多次评估。 - David Thornley