gpt4 book ai didi

c++ - 反对使用 size_t 的理由是什么?

转载 作者:太空狗 更新时间:2023-10-29 21:06:32 24 4
gpt4 key购买 nike

我有这样的 API,

class IoType {
......
StatusType writeBytes(......, size_t& bytesWritten);
StatusType writeObjects(......, size_t& objsWritten);
};

我尊敬的团队中的一位高级成员似乎对类型 size_t 有疑问,并建议我使用 C99 类型。我知道这听起来很愚蠢,但我一直认为像 uint32_t 和 uint64_t 这样的 c99 类型看起来很难看。我确实会使用它们,但仅在确实有必要时才使用它们,例如,当我需要序列化/反序列化一个结构时,我确实想具体说明我的数据成员的大小。

反对使用 size_t 的理由是什么?我知道它不是真正的类型,但如果我确定即使 32 位整数对我来说就足够了,而且大小类型似乎适合字节数或对象数等。

最佳答案

每当您处理任何类型的序列化(二进制文件、网络等)时,请使用精确大小的类型,例如 uint32_t。每当您处理内存中对象的大小时,请使用 size_t — 这正是它的用途。所有处理对象大小的函数,如 mallocstrlensizeof 运算符都是 size_t

如果您正确使用size_t,您的程序将具有最大的可移植性,并且不会在不需要的平台上浪费时间和内存。在 32 位平台上,size_t 将为 32 位——如果您改为使用 uint64_t,则会浪费时间和空间。相反,在 64 位平台上,size_t 将是 64 位——如果您改为使用 uint32_t,您的程序可能会出现错误(甚至可能崩溃或打开安全漏洞)如果它曾经不得不处理一 block 大于 4 GB 的内存。

关于c++ - 反对使用 size_t 的理由是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7564342/

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