#include <algorithm>
#include <Windows.h>
int main()
{
int k = std::min(3, 4);
return 0;
}
如果我包含 Windows.h,Windows 会做什么?我无法在 Visual Studio 2005 中使用 std::min
。错误消息是:
error C2589: '(' : illegal token on right side of '::'
error C2059: syntax error : '::'
原文由 hidayat 发布,翻译遵循 CC BY-SA 4.0 许可协议
The
windows.h
header file (or more correctly,windef.h
that it includes in turn) has macros formin
andmax
which are interfering.在包含它之前,您应该
#define NOMINMAX
。事实上,即使 没有 冲突,您也应该这样做,因为宏的天真定义说明了为什么类函数宏是一个坏主意:
如果您调用该宏,例如:
那么
y
不会得到你所期望的结果。例如,它将扩展为:该表达式(除非未定义的行为会更糟)将减少
y
两次,这不是您可能期望的。我现在基本上只将宏用于条件编译,其他两个旧的主要用例(符号常量和类似函数的宏)可以通过更现代的语言特性(真正的枚举类型和内联函数建议)更好地处理。