在 Linux 上编程 C++ 时应该使用哪些类型?使用类型 from 是否是个好主意stdint.h,例如int16_tand uint8_t?
一方面,肯定stdint.h无法在 Windows 上进行编程。另一方面,short在第一批眼睛上,eg 的大小并不清楚。而且写起来更直观,int8_t而不是char......
C++ 标准是否保证标准类型的大小在未来不会改变?
首先,微软的实现确实支持 <stdint.h>.
使用适合您正在执行的操作的类型。
例如,如果您需要一个正好为 16 位宽且没有填充位的无符号类型,请使用uint16_t在<stdint.h>.
如果您需要一个至少16 位宽的无符号类型,您可以使用uint_least16_t, or uint_fast16_t, or short, or int。
您可能并不像您认为的那样经常需要精确宽度类型。通常,重要的不是类型的确切大小,而是它支持的值范围。但是当您连接到某些外部定义的数据格式时,精确的表示很重要。在这种情况下,您应该已经有了告诉您要使用的类型的声明。
上有预定义类型的范围具体要求:char至少为8位,short并且int是至少16位,long至少是32位,并且long long是至少64位。此外,short至少与 一样宽char,int至少与 一样宽short,依此类推。(该标准指定了最小范围,但可以从范围和需要二进制表示的事实中推导出最小大小。)
请注意,这<stdint.h>是一个 C 头文件。如果#include在 C++ 程序中,类型名称将直接导入到全局命名空间中,并且可能也可能不导入到std命名空间中。如果是#include <cstdint>,则类型名称将被导入到std命名空间中,并且可能也可能不会导入到全局命名空间中。宏名称如UINT32_MAX不在任何命名空间中;它们始终是全球性的。您可以使用任一版本的标头;只是在使用或不使用std::前缀方面保持一致。