我想知道我的程序正在运行的系统上 size_t 的最大值。我的第一直觉是使用负 1,如下所示:
size_t max_size = (size_t)-1;
但我猜有更好的方法,或者在某个地方定义一个常量。
C99 中存在一个清单常量(宏),它被称为SIZE_MAX
. 但是在 C89/90 中没有这样的常数。
但是,您在原始帖子中所拥有的是一种完美可移植的方法来找到size_t
. 保证可以使用任何无符号类型。
#define MAZ_SZ (~(size_t)0)
或者SIZE_MAX
作为其他答案中建议的位操作的替代方法,您可以在 C++ 中执行此操作
#include <limits>
size_t maxvalue = std::numeric_limits<size_t>::max()
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;
如果您假设至少 C++11 编译器,那么您应该可以使用 SIZE_MAX: