在Linux上编写C ++时,我应该使用哪些类型?是否应该使用stdint.h
中的类型,例如int16_t
和uint8_t
?
一方面,肯定stdint.h
无法在Windows上进行编程。另一方面,例如short
在第一批眼中并不清楚。写int8_t
而不是char
...
C ++标准是否保证,未来标准类型的大小将保持不变?
答案 0 :(得分:4)
首先,微软的实施does support <stdint.h>
。
使用适当的类型来处理您正在做的事情。
例如,如果您需要一个16位宽且无填充位的无符号类型,请使用uint16_t
中定义的<stdint.h>
。
如果您需要至少 16位宽的无符号类型,则可以使用uint_least16_t
,uint_fast16_t
或short
或{{1 }}
您可能不像您认为的那样经常需要精确宽度类型。通常重要的不是类型的确切大小,而是它支持的值的范围。但是,当您与某些外部定义的数据格式连接时,精确表示非常重要。在这种情况下,您应该已经有声明告诉您要使用的类型。
对预定义类型的范围有特定要求:int
至少为8位,char
和short
至少为16位,int
位于至少32位,long
至少为64位。此外,long long
至少与short
一样宽,char
至少与int
一样宽,依此类推。 (该标准规定了最小范围,但最小尺寸可以从范围和需要二进制表示的事实中推导出来。)
请注意short
是C标头。如果您在C ++程序中<stdint.h>
,则类型名称将直接导入全局名称空间,而可能也可能不会导入#include
名称空间。如果您std
,则类型名称将导入#include <cstdint>
命名空间,而可能也可能不会导入全局命名空间。诸如std
之类的宏名称不在任何名称空间中;他们总是全球化的。您可以使用任一版本的标题;只是对使用或不使用UINT32_MAX
前缀保持一致。
答案 1 :(得分:3)
C ++标准没有详细说明整数类型的大小(例如int
,long
或char
)。如果你想确定,某个类型在不同平台上具有固定的大小,你可以使用C ++ 11的Fixed-width integer types,它们是标准化的,并保证给定大小。
要使用它们,#include <cstdint>
。
C ++标准是否保证,未来标准类型的大小将保持不变?
不太可能。在8位计算机上,整数类型的大小与现在的大小不同。将来,在2042年,使用1024位计算机,我假设long long
为1024位长。
但是,我们几乎可以肯定,std::uint32_t
将保持32位长。