gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 12:34:04 28 4
gpt4 key购买 nike

我的类结构定义如下:

#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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com