标准库头文件 是 C++11 引入的一个头文件,定义了固定宽度的整数类型以及其他与整数相关的类型和宏。它主要提供了与 C 标准库中的 <stdint.h> 相同的功能,但以 C++ 的方式进行包装。
固定宽度整数类型
这些类型在所有平台上具有固定的宽度和有无符号性,从而确保代码的可移植性。
有符号整数类型
- int8_t:8 位有符号整数。
- int16_t:16 位有符号整数。
- int32_t:32 位有符号整数。
- int64_t:64 位有符号整数。
无符号整数类型
- uint8_t:8 位无符号整数。
- uint16_t:16 位无符号整数。
- uint32_t:32 位无符号整数。
- uint64_t:64 位无符号整数。
最小宽度整数类型
这些类型提供至少指定宽度的整数,适用于需要保证最小宽度但不关心具体实现的场合。
有符号最小宽度整数类型
- int_least8_t
- int_least16_t
- int_least32_t
- int_least64_t
无符号最小宽度整数类型
- uint_least8_t
- uint_least16_t
- uint_least32_t
- uint_least64_t
最快宽度整数类型
这些类型提供最快的至少指定宽度的整数,适用于需要保证最小宽度并且希望实现最快速度的场合。
有符号最快宽度整数类型
- int_fast8_t
- int_fast16_t
- int_fast32_t
- int_fast64_t
无符号最快宽度整数类型
- uint_fast8_t
- uint_fast16_t
- uint_fast32_t
- uint_fast64_t
指针宽度整数类型
这些类型用于存储指针值。
- intptr_t:可以存储指针的有符号整数类型。
- uintptr_t:可以存储指针的无符号整数类型。
最大宽度整数类型
- intmax_t:表示最大宽度的有符号整数类型。
- uintmax_t:表示最大宽度的无符号整数类型。
其他与整数相关的类型和宏
-
int8_t 和 uint8_t 可能在某些平台上被定义为 char,这会影响它们在函数重载中的使用。
-
还定义了一些与整数类型相关的宏,例如 INT8_MIN、INT8_MAX、UINT8_MAX
等,这些宏定义了对应类型的最小值和最大值。
示例代码
下面是一个使用 中定义的类型的示例:
#include <cstdint>
#include <iostream>
int main() {
int8_t a = 127; // 最大值为 127
uint16_t b = 65535; // 最大值为 65535
int32_t c = -2147483648; // 最小值为 -2147483648
uint64_t d = 18446744073709551615ULL; // 最大值为 18446744073709551615
std::cout << "int8_t a = " << static_cast<int>(a) << std::endl;
std::cout << "uint16_t b = " << b << std::endl;
std::cout << "int32_t c = " << c << std::endl;
std::cout << "uint64_t d = " << d << std::endl;
return 0;
}
在这个示例中,我们使用了 int8_t、uint16_t、int32_t 和 uint64_t 类型,并输出它们的值。请注意,int8_t 被输出时需要进行类型转换,因为 int8_t 实际上是 char 类型,直接输出时会被解释为字符。
小结
- 提供了固定宽度整数类型,确保代码在不同平台上的一致性。
- 提供了最小宽度和最快宽度的整数类型,以满足不同的性能需求。
- 提供了用于存储指针值的整数类型和最大宽度的整数类型。
- 还定义了与这些类型相关的宏,用于获取它们的最小值和最大值。