查找 size_t 最大值的可移植方法是什么?

发布于 2024-09-13 19:04:22 字数 142 浏览 5 评论 0原文

我想知道我的程序正在运行的系统上 size_t 的最大值。 我的第一直觉是使用负数 1,如下所示:

size_t max_size = (size_t)-1;

但我猜有更好的方法,或者在某处定义的常量。

I'd like to know the maximum value of size_t on the system my program is running.
My first instinct was to use negative 1, like so:

size_t max_size = (size_t)-1;

But I'm guessing there's a better way, or a constant defined somewhere.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

背叛残局 2024-09-20 19:04:22

C99 中存在一个明显常量(宏),称为 SIZE_MAX。但 C89/90 中没有这样的常数。

但是,您在原始帖子中拥有的是一种完美可移植的方法来查找 size_t 的最大值。它保证适用于任何无符号类型。

A manifest constant (a macro) exists in C99 and it is called SIZE_MAX. There's no such constant in C89/90 though.

However, what you have in your original post is a perfectly portable method of finding the maximum value of size_t. It is guaranteed to work with any unsigned type.

白鸥掠海 2024-09-20 19:04:22
#define MAZ_SZ (~(size_t)0)

SIZE_MAX

#define MAZ_SZ (~(size_t)0)

or SIZE_MAX

沫离伤花 2024-09-20 19:04:22

作为其他答案中建议的位操作的替代方案,您可以这样做:

#include <limits>
size_t maxvalue = std::numeric_limits<size_t>::max()

As an alternative to bit-operations suggested in the other answers, you could do this:

#include <limits>
size_t maxvalue = std::numeric_limits<size_t>::max()
霊感 2024-09-20 19:04:22

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;

The size_t max_size = (size_t)-1; solution suggested by the OP is definitely the best so far, but I did figure out another, more convoluted, way to do this. I'm posting it just for academic curiosity.

#include <limits.h>

size_t max_size = ((((size_t)1 << (CHAR_BIT * sizeof(size_t) - 1)) - 1) << 1) + 1;
风启觞 2024-09-20 19:04:22

如果您假设至少是 C++11 编译器,则 SIZE_MAX 应该可供您使用:

http ://en.cppreference.com/w/c/types/limits

If you are assuming at least C++11 compiler then SIZE_MAX should be available to you:

http://en.cppreference.com/w/c/types/limits

故事和酒 2024-09-20 19:04:22

而不是:

size_t max_size =  (size_t)-1;

我会使用:

size_t max_size =  size_t(-1);

更清楚的是,您构建了值为 -1 的 size_t 并且没有从名为“size_t”的假设变量中减去 -1 :-D

Instead of:

size_t max_size =  (size_t)-1;

I would use:

size_t max_size =  size_t(-1);

It's just a bit more clear that you constructing a size_t with value -1 and are not subtracting -1 from a hypothetical variable called "size_t" :-D

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文