代码具有min()/ max()调用的奇怪C ++错误

时间:2008-08-18 04:13:35

标签: c++ c

当我的C ++代码有min()或max()调用时,我看到了奇怪的错误。我正在使用Visual C ++编译器。

6 个答案:

答案 0 :(得分:17)

检查您的代码是否包含 windows.h 头文件,并且您的代码或其他第三方标头都有自己的 min() / max ()定义。如果是,请将 windows.h 包含在 NOMINMAX 的前缀中,如下所示:

#define NOMINMAX
#include <windows.h>

答案 1 :(得分:2)

由于Windows将其定义为函数式宏,因此可以使用以下解决方法:

int i = std::min<int>(3,5);

这是有效的,因为宏min()仅在min后跟(时展开,而不是在<后面展开。

答案 2 :(得分:2)

另一种可能性可能来自副作用。大多数min / max宏将多次包含参数,可能无法达到预期效果。还可能生成错误和警告。

max(a,i++) expands as ((a) > (i++) ? (a) : (i++))

afterwards i is either plus 1 or plus 2

扩展中的()用于避免在使用公式调用时出现问题。尝试扩展max(a,b + c)

答案 3 :(得分:1)

呃...范围,伙计:std::min()std::max()

答案 4 :(得分:0)

老实说,当涉及到min / max时,我发现最好定义自己的:

#define min(a,b) ((a) < (b) ? (a) : (b))
#define max(a,b) ((a) >= (b) ? (a) : (b))

答案 5 :(得分:0)

我多年没有用它了但是从内存提升中也分配了min和max,可能吗?