当我的C ++代码有min()或max()调用时,我看到了奇怪的错误。我正在使用Visual C ++编译器。
检查您的代码是否包含windows.h头文件,并且您的代码或其他第三方头文件都有自己的min()/ max()定义。如果是,那么在你的windows.h包含前加上NOMINMAX的定义,如下所示:
#define NOMINMAX
#include <windows.h>
另一种可能是副作用。大多数min / max宏将多次包含参数,可能无法达到预期效果。还可能生成错误和警告。
max(a,i++) expands as ((a) > (i++) ? (a) : (i++))The () in the expansion are to avoid problems if you call it with formulae. Try expanding max(a,b+c)之后我加1或加2
由于Windows将其定义为函数式宏,因此可以使用以下解决方法:
int i = std::min<int>(3,5);
这是有效的,因为宏min()
只有当min
后面跟着(
时才会扩展,而不是当它跟随<
时。
呃...范围吧,伙计:std::min()
,std::max()
。
多年来我没有用过它,但是从内存提升分配min和max,可能吗?
老实说,当涉及到min / max时,我发现最好定义自己的:
#define min(a,b) ((a) < (b) ? (a) : (b))
#define max(a,b) ((a) >= (b) ? (a) : (b))