第2.20章: ::std::byte

English

概述

::std::byte 是表示单个字节数据的类型。 与 char 或 unsigned char 不同, ::std::byte 不是字符类型,不能用于文本。 它只是一个小的、强类型的存储单元。

在本章中,你将学到:

1. 什么是 ::std::byte?

::std::byte 是类似枚举的类型,表示单个字节。 它并不直接存储字符或数字,而是存储原始字节值。


::std::byte b{};

这创建一个值为零的 ::std::byte。

2. 初始化 ::std::byte

你可以用 ::std::byte{} 初始化一个 ::std::byte, 或者从整数转换而来。


::std::byte a{};                 // zero
::std::byte b{static_cast<unsigned char>(42)};

注意:从整数转换时必须使用显式转换。 这可以防止意外误用。

3. 把 ::std::byte 转换为整数

要把 ::std::byte 转回整数,请使用 ::std::to_integer。


::std::byte b{static_cast<unsigned char>(7)};
unsigned int x = ::std::to_integer<unsigned int>(b);

这会提取存储在该字节中的数值。

4. ::std::byte 为何存在?

在 ::std::byte 出现之前,程序员常用 unsigned char 表示原始字节。但 unsigned char 仍然是字符类型,这容易造成混淆。

::std::byte 通过提供这样一种类型来解决这个问题:

5. ::std::byte 上的操作

::std::byte 支持如下位运算:


::std::byte b{static_cast<unsigned char>(1)};
b = b << 2;   // shift left

这些操作把字节当作原始位来处理,而不是当作数字。

要点