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

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

<分区>

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

auto a = std::numeric_limits<long long>::max();

它找不到max() 的定义。这是为什么?

最佳答案

max 调用可能会干扰 Windows SDK header 中定义的“邪恶的”max preprocessor 宏,您可能已经包含(直接或间接)。

一个选项是防止预处理器 max 宏启动,使用额外的一对括号:

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

作为附加选项,您可以考虑#define #NOMINMAX before 包括 Windows header 。这将阻止上述 minmax 预处理器宏的定义。

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

关于c++ - 为什么 std::numeric_limits<long long>::max() 会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40492414/

相关文章:

c++ - 如何在 C++ 中将值与模板和 boost 进行比较?

c++ - std::vector 构造函数中的 bad_alloc

c++ - 为什么从内存映射文件读取这么快?

c++ - 使用 const_cast 的自动类型推导不起作用

visual-studio - Typescript编辑并继续visual studio 2015

c++ - 使用匿名管道替代 PeekNamePipe() -- WIN32

windows - 内核驱动签名

c++ - 在 Windows 上使用 C++ 在本地发送 POST 请求

visual-studio-2015 - 如何将 Visual Studio 2015 RC 升级到 RTM

c++ - 如何从 std::vector 的末尾删除几个元素?