如何以及在哪里保证a uint8_t是8位?
深入研究N3242 - "工作草案,编程语言C++标准",第18.4.1节<cstdint>概要说 -
`typedef unsigned integer type uint8_t; // optional`
Run Code Online (Sandbox Code Playgroud)
因此,实质上,根本不需要定义符合C++标准的库uint8_t.
更新:可能只是问,标准的哪一行说uintN_t类型是N位?
来自C++:
18.4.1标题简介
...标题定义了所有函数,类型和宏,与C标准中的7.18相同....
来自C:
7.20.1.1精确宽度整数类型
1 typedef名称intN_t指定带符号的整数类型,其宽度为N,无填充位和二进制补码表示.因此,int8_t表示这样的带符号整数类型,其宽度恰好为8位.
2 typedef名称uintN_t指定宽度为N且无填充位的无符号整数类型.因此,uint24_t表示这样的无符号整数类型,其宽度恰好为24位.
3这些类型是可选的.但是,如果实现提供宽度为8,16,32或64位的整数类型,没有填充位,并且(对于具有二进制补码表示的有符号类型),它应定义相应的typedef名称.
因此,实质上,根本不需要定义符合C++标准的库来定义uint8_t.
正确.正如Nikos所提到的那样(+1),当/如果typedef不存在/声明时,你只需要一个替代品.