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

She*_*een 4 c++ windows stl max visual-studio-2015

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

auto a = std::numeric_limits<long long>::max();
Run Code Online (Sandbox Code Playgroud)

它找不到定义max().为什么是这样?

Mr.*_*C64 7

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

一个选项是max使用另外一对括号来阻止预处理器宏启动:

... = (std::numeric_limits<long long>::max)();
Run Code Online (Sandbox Code Playgroud)

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

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

  • 到目前为止,最好的选择是在引入任何与Windows相关的标题之前"#define NOMINMAX",甚至将define添加到编译器命令行.这是防止Windows标头定义`min`和`max`的文档化方法. (2认同)