为什么这段代码不起作用?
#include <Windows.h>
#include <limits>
int main()
{
min(1, 2);
std::numeric_limits<int>::max();
}
这个有用吗?
#include <Windows.h>
#include <limits>
int main()
{
min(1, 2);
(std::numeric_limits<int>::max)();
}
第二个例子更有趣。这在语言方面意味着什么?
问题是一些专家想出了在 Windows.h 中为 min 和 max 放置两个定义的想法。但是预处理器总是在编译之前运行。他看到了 max(他对命名空间一无所知)并试图从中找到两个参数。但他们不在那里......他发誓。当括号出现时,预处理器解析器看不到括号
()并且不会尝试进行替换。代码变为“预期”。解决问题的第二个选项是将其添加到定义列表中 -
NOMINMAX对于好奇的人。在 Windows.h 里面有这个
微软知道这个问题,但他们不会碰它:)。