首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 ><stdint.h>还是标准类型?

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

Stack Overflow用户
提问于 2016-11-02 18:53:19
回答 2查看 2.4K关注 0票数 2

在Linux上编程C++时,我应该使用哪些类型?使用来自stdint.h的类型(如int16_tuint8_t )好吗?

一方面,stdint.h肯定无法在Windows上进行编程。然而,在第一批眼睛上,例如short的大小并不清楚。写int8_t而不是char更加直观.

C++标准是否保证将来标准类型的大小将保持不变?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-02 19:15:15

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

对你正在做的事情使用适当的类型。

例如,如果需要一个宽为16位、没有填充位的无符号类型,请使用uint16_t,它是在<stdint.h>中定义的。

如果需要至少16位宽的无符号类型,可以使用uint_least16_tuint_fast16_tshortint

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

对于预定义类型的范围有特定的要求:char至少8位,shortint至少16位,long至少32位,long long至少64位。而且,short至少和char一样宽,int至少和short一样宽,依此类推。(标准指定最小范围,但最小大小可以从范围和需要二进制表示的事实中导出。)

注意,<stdint.h>是一个C头。如果您在一个#include程序中将它导入,类型名称将直接导入全局命名空间,并且可能也可能不会导入到std命名空间中。如果您使用#include <cstdint>,那么类型名称将导入到std命名空间中,并且可能导入也可能不导入全局命名空间。宏名称(如UINT32_MAX )不在任何名称空间中;它们总是全局的。您可以使用标头的任何一个版本;只要使用或不使用std::前缀就行了。

票数 6
EN

Stack Overflow用户

发布于 2016-11-02 19:06:37

C++标准并没有对整数类型的大小(例如intlongchar)进行过多的指定。如果您想确定某些类型跨平台的大小是固定的,您可以使用C++11的固定宽度整数类型,它是标准化的,并且保证了给定的大小。

使用它们,#include <cstdint>

C++标准是否保证将来标准类型的大小将保持不变?

不太可能。在8位计算机上,整数类型的大小与现在不同。在未来,在2042年,有1024位计算机,我认为long long是1024位长.

然而,我们几乎完全可以肯定,std::uint32_t将保持32位长.

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40387662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档