我一直在考虑是否应该在<cstdint>中使用typedefs。
我个人更喜欢写uint32_t而不是unsigned int,更喜欢int8_t而不是char等等。因为它对我来说要直观得多。
你们觉得怎么样?使用<cstdint>中的typedefs是不是一个好主意?有什么缺点吗?
发布于 2011-05-27 04:37:12
实际上,我建议两者都使用。
如果你想要的东西一定是32位无符号的,使用uint32_t。例如,如果你正在实现一个“结构”来表示一个外部对象,它的规范定义了一个32位无符号的字段。
如果你想要的东西是“机器的自然字长”,使用int或unsigned int。例如:
for (int i = 0 ; i < 200 ; ++i)
// stuff无论是在今天的处理器上,还是在明天的处理器上,“机器的自然字长”都将为您提供最佳性能。
如果指的是“character”,则使用"char“;如果指的是"byte”,则使用"unsigned char“。C/C++允许您通过"char *“访问任意对象的字节,严格地说,不是其他任何东西。
如果您特别需要8位整数,请使用uint8_t或int8_t,类似于uint32_t。
发布于 2011-05-27 04:41:37
您应该同时使用这两种方法。当您需要一个“合理大小”的整数时,您应该使用int,正如其他答案中所解释的那样。当你需要一个字符时使用char:它是自我记录的。
在使用二进制与外部世界交互时,您应该使用uint32_t和朋友:在进行网络编程、处理二进制文件或使用外来多字节编码等时。在这些情况下,类型的准确大小对于编写正确的、可移植的、自记录的代码至关重要。这就是<stdint.h> (或C++0x <cstdint>)的用途。
(字节顺序同样重要,但这完全是另一回事。)
发布于 2011-05-27 04:50:13
需要使用cstdint中的typedefs的一种特殊情况是在处理执行大量指针到整型转换的代码时,在这种情况下,绝对需要使用intptr_t。
在我工作的公司,我们正在准备将自己从32位迁移到64位,大量质量低劣的C/C++代码不断地将指针转换为整数,然后再转换回指针,这在64位架构上肯定会失败,因此我们将尽可能尝试清理代码(即修改数据结构和接口以完全消除转换的需要),并在其他任何地方使用intptr_t而不是整数。
顺便说一句:强制转换通常会引起怀疑,但严肃地说,将指针转换为整数几乎总是设计中某个严重缺陷的结果。基本上,每当你在int后面隐藏一个指针时,你都是在欺骗编译器,平台,更重要的是你的同事。
除此之外,就像其他人所说的:尽可能使用泛型类型,需要时使用显式大小的类型。
https://stackoverflow.com/questions/6144682
复制相似问题