我想知道我的程序运行的系统上size_t的最大值。我的第一React是使用负1,如下所示:
size_t max_size = (size_t)-1;
字符串但我猜有更好的方法,或者在某处定义了一个常数。
hec6srdp1#
在C99中有一个显式常量(宏),它被称为SIZE_MAX。但是在C89/90中没有这样的常量。然而,你在最初的帖子中所提供的是一个完美的可移植的方法来寻找size_t。它保证可以处理任何无符号类型。
SIZE_MAX
size_t
zi8p0yeb2#
#define MAZ_SZ (~(size_t)0)
字符串或SIZE_MAX
rwqw0loc3#
作为其他答案中建议的位操作的替代方案,您可以这样做:
#include <limits> size_t maxvalue = std::numeric_limits<size_t>::max()
字符串
vawmfj5a4#
OP建议的size_t max_size = (size_t)-1;解决方案绝对是目前为止最好的,但我确实找到了另一种更复杂的方法来做到这一点。
#include <limits.h> size_t max_size = ((((size_t)1 << (CHAR_BIT * sizeof(size_t) - 1)) - 1) << 1) + 1;
k97glaaz5#
如果你假设至少有C++11编译器,那么SIZE_MAX应该对你可用:http://en.cppreference.com/w/c/types/limits
nzk0hqpo6#
而不是:
字符串我会使用:用途:
size_t max_size = size_t(-1);
型更清楚的是,你构造了一个值为-1的size_t,而不是从一个名为“size_t”的假设变量中减去-1:-D
6条答案
按热度按时间hec6srdp1#
在C99中有一个显式常量(宏),它被称为
SIZE_MAX
。但是在C89/90中没有这样的常量。然而,你在最初的帖子中所提供的是一个完美的可移植的方法来寻找
size_t
。它保证可以处理任何无符号类型。zi8p0yeb2#
字符串
或
SIZE_MAX
rwqw0loc3#
作为其他答案中建议的位操作的替代方案,您可以这样做:
字符串
vawmfj5a4#
OP建议的
size_t max_size = (size_t)-1;
解决方案绝对是目前为止最好的,但我确实找到了另一种更复杂的方法来做到这一点。字符串
k97glaaz5#
如果你假设至少有C++11编译器,那么SIZE_MAX应该对你可用:
http://en.cppreference.com/w/c/types/limits
nzk0hqpo6#
而不是:
字符串
我会使用:用途:
型
更清楚的是,你构造了一个值为-1的size_t,而不是从一个名为“size_t”的假设变量中减去-1:-D