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

问题描述 投票:6回答:6

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

c++ c
6个回答
17
投票

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

#define NOMINMAX
#include <windows.h>

2
投票

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

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

之后我加1或加2

The () in the expansion are to avoid problems if you call it with formulae. Try expanding max(a,b+c)

2
投票

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

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

这是有效的,因为宏min()只有当min后面跟着(时才会扩展,而不是当它跟随<时。


1
投票

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


0
投票

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


0
投票

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

#define min(a,b) ((a) < (b) ? (a) : (b))
#define max(a,b) ((a) >= (b) ? (a) : (b))
© www.soinside.com 2019 - 2024. All rights reserved.