我想知道我的程序运行的系统上size_t的最大值.我的第一直觉是使用负1,就像这样:
size_t max_size = (size_t)-1;
Run Code Online (Sandbox Code Playgroud)
但我猜测有更好的方法,或者某个地方定义的常数.
AnT*_*AnT 68
C99中存在一个清单常量(宏)并且它被调用SIZE_MAX.但是在C89/90中没有这样的常数.
但是,你在原帖中所拥有的是一种找到最大值的便携式方法size_t.它保证可以使用任何无符号类型.
作为其他答案中建议的位操作的替代方法,您可以在 C++ 中执行此操作
#include <limits>
size_t maxvalue = std::numeric_limits<size_t>::max()
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)