我应该使用cstdint吗?

ron*_*nag 40 c++ cstdint

我一直在思考是否应该在内部使用typedef <cstdint>.

我个人比较喜欢写uint32_tunsigned intint8_tchar等...因为这对我来说是一个很大更加直观.

你们有什么感想?是否使用typedef是一个好主意 <cstdint>?有什么缺点吗?

Nem*_*emo 35

实际上,我建议同时使用两者.

如果你想要一些肯定是32位无符号的东西,请使用uint32_t.例如,如果要实现"struct"来表示外部对象,该外部对象的规范将其字段之一定义为32位无符号.

如果你想要的东西是"机器的自然字大小",请使用int或unsigned int.例如:

for (int i = 0 ; i < 200 ; ++i)
    // stuff
Run Code Online (Sandbox Code Playgroud)

"机器的自然字大小"将为您提供最佳性能,无论是在今天的处理器还是明天的处理器上.

如果你的意思是"性格",请使用"char"; "char"或"unsigned char"如果你的意思是"字节".C/C++允许您通过"char*"访问任意对象的字节,严格来说,不是任何其他内容.

如果您特别需要8位整数,请使用uint8_t或int8_t,类似于uint32_t.

  • @MathieuJVL:取决于你所谓的自然字大小.机器可以在32位整数上运行得最快,但是有64位指针,因此`size_t`必须大于`int`. (5认同)
  • 请注意,严格来说,所有`intN_t`和`uintN_t`类型都是可选的.例如,曾经有过36位字的机器,`CHAR_BIT == 9`.对于这样的机器,没有8位类型,因此不会在它们上定义`uint8_t`(但是将定义`uint_least8_t`,和uint_fast8_t`一样).这些机器现在主要是博物馆作品,但是另一种不提供`uint8_t`的现代类型的系统将是一个DSP芯片,其中`CHAR_BIT == 16`. (3认同)
  • 对于机器的自然字大小,不会使用size_t而不是int或unsigned int吗? (2认同)
  • 在这种情况下,您实际上应该使用uint_fast32_t.这被定义为至少32位宽的"最快"数据类型.但是,输入比无符号更难. (2认同)

Fre*_*Foo 22

你应该同时使用两者.int当您需要"合理大小"的整数时,您应该使用其他答案中的解释.char在需要角色时使用:它是自我记录的.

uint32_t在二进制文件与外部世界交互时,你应该使用和朋友:进行网络编程,处理二进制文件或使用外部多字节编码等.在这些情况下,类型的确切大小对于编写正确,可移植的,自我记录的代码.这就是<stdint.h>(或C++ 0x <cstdint>)的用途.

(Endianness同样重要,但这完全是另一回事.)