<stdint.h>还是标准类型?

<stdint.h> or standard types?

本文关键字:标准 类型 gt lt stdint      更新时间:2023-10-16

在Linux上编程c++应该使用哪些类型?使用来自stdint.h的类型,如int16_tuint8_t,是不是一个好主意?

一方面,stdint.h肯定不能用于Windows上的编程。另一方面,例如short的大小在第一批眼睛上并不清楚。用int8_t代替char更直观…

c++标准是否保证标准类型的大小在将来不会改变?

首先,微软的实现支持<stdint.h>

使用合适的类型。

如果你需要,例如,一个正好16位宽且没有填充位的unsigned类型,使用uint16_t,在<stdint.h>中定义。

如果你需要一个至少16位宽的unsigned类型,你可以使用uint_least16_t,或uint_fast16_t,或short,或int

你可能并不像你想象的那样经常需要精确宽度类型。通常重要的不是类型的确切大小,而是它支持的值范围。但是,当您与外部定义的数据格式进行接口时,精确的表示非常重要。在这种情况下,你应该已经有了声明,告诉你使用什么类型。

预定义类型的取值范围有具体要求:char至少8位,shortint至少16位,long至少32位,long long至少64位。同样,short至少和char一样宽,int至少和short一样宽,以此类推。(标准规定了最小范围,但最小尺寸可以从范围和需要二进制表示的事实中派生出来。)

注意<stdint.h>是一个C头文件。如果您在c++程序中使用#include,则类型名称将直接导入到全局命名空间中,可能也可能不被导入到std命名空间中。如果您使用#include <cstdint>,则类型名称将被导入到std名称空间中,并且可能也可能不被导入到全局名称空间中。宏名如UINT32_MAX不在任何命名空间中;它们总是全球性的。你可以使用头文件的任意一个版本;只要在使用或不使用std::前缀时保持一致即可。

c++标准对整数类型(如int, longchar)的大小没有太多规定。如果你想确保某种类型在不同的平台上有固定的大小,你可以使用c++ 11的固定宽度整数类型,它是标准化的,并保证有给定的大小。

使用它们,#include <cstdint> .

c++标准是否保证标准类型的大小在将来不会改变?

不太可能。在8位计算机上,整数类型的大小与现在不同。在未来的2042年,使用1024位计算机,我假设long long长度为1024位。

然而,我们几乎可以绝对肯定,std::uint32_t将保持32位长。