当我的 C++ 代码有 min() 或 max() 调用时,我看到了奇怪的错误。我正在使用 Visual C++ 编译器。
Ash
问问题
2264 次
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++))展开式中的 () 是为了避免用公式调用它时出现问题。尝试扩展 max(a,b+c)之后 i 要么加 1 要么加 2
于 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 回答