c++ - std::numeric_limits::max 的语法错误

标签 c++ visual-c++ syntax syntax-error numeric-limits

我的类结构定义如下:

#include <limits>

struct heapStatsFilters
{
    heapStatsFilters(size_t minValue_ = 0, size_t maxValue_ = std::numeric_limits<size_t>::max())
    { 
         minMax[0] = minValue_; minMax[1] = maxValue_; 
    }

    size_t minMax[2];
};

问题是我不能使用 'std::numeric_limits::max()' 并且编译器说:

错误 8 错误 C2059:语法错误:'::'

Error 7 error C2589: '(' : '::' 右侧的非法 token

我使用的编译器是 Visual C++ 11 (2012)

最佳答案

您的问题是由 <Windows.h> 引起的包含名为 max 的宏定义的头文件和 min :

#define max(a,b) (((a) > (b)) ? (a) : (b))

看到这个定义,预处理器替换了 max表达式中的标识符:

std::numeric_limits<size_t>::max()

通过宏定义,最终导致语法无效:

std::numeric_limits<size_t>::(((a) > (b)) ? (a) : (b))

编译器报错:'(' : illegal token on right side of '::' .

作为一种解决方法,您可以添加 NOMINMAX定义到编译器标志(或到翻译单元,在包含 header 之前):

#define NOMINMAX   

或将调用转至 max带括号,防止宏扩展:

size_t maxValue_ = (std::numeric_limits<size_t>::max)()
//                 ^                                ^

#undef max在调用 numeric_limits<size_t>::max() 之前:

#undef max
...
size_t maxValue_ = std::numeric_limits<size_t>::max()

关于c++ - std::numeric_limits::max 的语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27442885/

相关文章:

linux - 在 Bash 脚本中使用大括号内的 int 变量

c++ - 如何避免重复包含头文件

c++ - 处理两个后续的 SIGTERM

c++ - 在 Qt C++ 中使用多个键

c++ - 导出 DLL - 删除头文件

c++ - C++ 中的 vector 订阅错误

c++ - 损坏的 HTML - 浏览器不会从我的网络服务器下载整个 HTTP 响应,CURL 会

visual-studio-2010 - Notepad++ 构建失败,并显示消息 PostBuildEvent : The system cannot find the file specified

c++ - 这个增量语法是什么意思?

SQLCMD '.' 附近的语法不正确