为什么std :: numeric_limits <long long =“”> :: max()会失败?

时间:2016-11-08 16:56:26

标签: c++ windows visual-studio-2015 stl max

这行代码无法在VS2015 Update 3中编译:

String title = StringEscapeUtils.escapeJava(xmlResponse.getTitle()).replace(Constants.ESCAPED_NEWLINE, Constants.NEWLINE);

找不到auto a = std::numeric_limits<long long>::max(); 的定义。这是为什么?

1 个答案:

答案 0 :(得分:7)

max调用可能会干扰Windows SDK标头中定义的“邪恶”max 预处理器宏,您可能已经(直接或间接)包含这些宏。

一个选项是使用附加的括号阻止预处理器max宏启动:

... = (std::numeric_limits<long long>::max)();

作为附加选项,您可以在包含Windows标头的之前考虑 #define #NOMINMAX 。这将阻止上述minmax预处理器宏的定义。

但是,请注意,某些Windows标头(如GDI +)确实需要 Win32的minmax预处理器宏,因此在这种情况下使用额外的一对括号可能是更好的选择。