在Linux上编程C++时,我应该使用哪些类型?使用来自stdint.h的类型(如int16_t和uint8_t )好吗?
一方面,stdint.h肯定无法在Windows上进行编程。然而,在第一批眼睛上,例如short的大小并不清楚。写int8_t而不是char更加直观.
C++标准是否保证将来标准类型的大小将保持不变?
发布于 2016-11-02 19:15:15
首先,微软的实现支持 <stdint.h>。
对你正在做的事情使用适当的类型。
例如,如果需要一个宽为16位、没有填充位的无符号类型,请使用uint16_t,它是在<stdint.h>中定义的。
如果需要至少16位宽的无符号类型,可以使用uint_least16_t、uint_fast16_t、short或int。
你可能不像你想的那样经常需要精确的宽度类型。通常重要的不是类型的确切大小,而是它所支持的值的范围。但是,在与某些外部定义的数据格式进行接口时,准确的表示是非常重要的。在这种情况下,您应该已经有声明来告诉您要使用什么类型。
对于预定义类型的范围有特定的要求:char至少8位,short和int至少16位,long至少32位,long long至少64位。而且,short至少和char一样宽,int至少和short一样宽,依此类推。(标准指定最小范围,但最小大小可以从范围和需要二进制表示的事实中导出。)
注意,<stdint.h>是一个C头。如果您在一个#include程序中将它导入,类型名称将直接导入全局命名空间,并且可能也可能不会导入到std命名空间中。如果您使用#include <cstdint>,那么类型名称将导入到std命名空间中,并且可能导入也可能不导入全局命名空间。宏名称(如UINT32_MAX )不在任何名称空间中;它们总是全局的。您可以使用标头的任何一个版本;只要使用或不使用std::前缀就行了。
发布于 2016-11-02 19:06:37
C++标准并没有对整数类型的大小(例如int、long或char)进行过多的指定。如果您想确定某些类型跨平台的大小是固定的,您可以使用C++11的固定宽度整数类型,它是标准化的,并且保证了给定的大小。
使用它们,#include <cstdint>。
C++标准是否保证将来标准类型的大小将保持不变?
不太可能。在8位计算机上,整数类型的大小与现在不同。在未来,在2042年,有1024位计算机,我认为long long是1024位长.
然而,我们几乎完全可以肯定,std::uint32_t将保持32位长.
https://stackoverflow.com/questions/40387662
复制相似问题