gpt4 book ai didi

c++ - 用 unsigned long 替换 size_t 的缺点是什么

转载 作者:可可西里 更新时间:2023-11-01 18:16:11 30 4
gpt4 key购买 nike

我正在开发的库需要在 32 位和 64 位机器上使用;我有很多编译器警告,因为在 64 位机器上 unsigned int != size_t

将所有 unsigned intsize_t 替换为“unsigned long”有什么缺点吗?我很欣赏它看起来不是很优雅,但是,在这种情况下,内存不是太大的问题......我想知道是否有可能由这样的 替换产生任何错误/不需要的行为等all 操作(你能举个例子吗)?谢谢。

最佳答案

什么警告?我能想到的最明显的一个是“缩小转换”,也就是说你正在将 size_t 分配给 unsigned int,并收到一条警告信息可能迷路了。

unsigned long 替换 size_t 的主要缺点是 unsigned long 不能保证足够大以包含每个可能的值size_t,在 Windows 64 上它不够大。所以您可能会发现仍然有警告。

正确的解决方法是,如果您将 size_t 分配给变量(或数据成员),您应该确保该变量的类型足够大以包含 size_t< 的任何值。这就是警告的全部内容。所以你不应该切换到 unsigned long,你应该将这些变量切换到 size_t

相反,如果您有一个不需要大到足以容纳任何大小的变量,只要足够大即可容纳 unsigned int,则不要使用 size_t 首先是为了它。

这两种类型(size_tunsigned int)都有有效的用途,所以任何不加区别地用其他类型替换它们的所有使用的方法必须 是错误的 :-) 实际上,您可以将所有内容替换为 size_tuintmax_t 并且对于大多数程序来说都是可以的。异常(exception)情况是代码依赖于使用与 int 或其他大小相同的无符号类型,这样更大的类型会破坏代码。

关于c++ - 用 unsigned long 替换 size_t 的缺点是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15637228/

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