7

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

4

6 回答 6

18

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

#define NOMINMAX
#include <windows.h>
于 2008-08-18T04:15:34.510 回答
2

另一种可能性可能来自副作用。大多数最小/最大宏将多次包含参数,并且可能无法达到您的预期。也可能产生错误和警告。

max(a,i++) 展开为 ((a) > (i++) ? (a) : (i++))

之后 i 要么加 1 要么加 2

展开式中的 () 是为了避免用公式调用它时出现问题。尝试扩展 max(a,b+c)

于 2008-08-23T11:17:25.570 回答
2

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

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

之所以有效,是因为宏min()仅在min后面跟着时展开(,而不是在后面跟着. 时展开<

于 2011-01-24T14:32:20.687 回答
0

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

于 2008-08-18T04:20:09.693 回答
0

我已经很多年没有使用它了,但是从内存提升中也分配了最小值和最大值,可能吗?

于 2008-08-18T04:49:15.377 回答
-1

老实说,当涉及到最小值/最大值时,我发现最好只定义我自己的:

#define min(a,b) ((a) < (b) ? (a) : (b))
#define max(a,b) ((a) >= (b) ? (a) : (b))
于 2009-11-24T22:17:01.320 回答