<stdint.h>还是标准类型?
<stdint.h> or standard types?
在Linux上编程c++应该使用哪些类型?使用来自stdint.h
的类型,如int16_t
和uint8_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位,short
和int
至少16位,long
至少32位,long long
至少64位。同样,short
至少和char
一样宽,int
至少和short
一样宽,以此类推。(标准规定了最小范围,但最小尺寸可以从范围和需要二进制表示的事实中派生出来。)
注意<stdint.h>
是一个C头文件。如果您在c++程序中使用#include
,则类型名称将直接导入到全局命名空间中,可能也可能不被导入到std
命名空间中。如果您使用#include <cstdint>
,则类型名称将被导入到std
名称空间中,并且可能也可能不被导入到全局名称空间中。宏名如UINT32_MAX
不在任何命名空间中;它们总是全球性的。你可以使用头文件的任意一个版本;只要在使用或不使用std::
前缀时保持一致即可。
c++标准对整数类型(如int
, long
或char
)的大小没有太多规定。如果你想确保某种类型在不同的平台上有固定的大小,你可以使用c++ 11的固定宽度整数类型,它是标准化的,并保证有给定的大小。
使用它们,#include <cstdint>
.
c++标准是否保证标准类型的大小在将来不会改变?
不太可能。在8位计算机上,整数类型的大小与现在不同。在未来的2042年,使用1024位计算机,我假设long long
长度为1024位。
然而,我们几乎可以绝对肯定,std::uint32_t
将保持32位长。
- 编译标准库类型
- 铸造标准::有没有回到原来的类型
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- 标准库类型的赋值运算符的引用限定符
- 强枚举类型定义:Clang Bug 还是 C++11 标准不确定性?
- 根据C++标准的定义实现"is_similar"类型特征
- 如何为缺少预定义运算符而不扩展命名空间"std"的标准类型定义运算符>> (istream &, ...)?
- 为什么使用标准类型作为模板参数?
- 对标准类型使用原子操作
- 如何定义从标准类型到用户定义类型的转换?
- 自定义和标准类型的数学函数的统一接口
- 使用标准类型的动态类型信息实例化标识符
- 如何切换通过C 标准类型特征传递的值
- 为标准C++类型定义空/空值
- 两个模板函数用于两种标准类型
- 删除左值,保留左值引用(标准类型特征可用?)
- <stdint.h>还是标准类型?
- c++标准类型扩展
- 标准库实现可以专门化标准类型吗
- stint .h中的c++标准类型大小