std::byte

来自cppreference.com
< cpp‎ | types
 
 
工具库
类型支持(基本类型、 RTTI 、类型特性)
动态内存管理
错误处理
程序工具
变参数函数
日期和时间
函数对象
(C++11)
关系运算符
optionalanyvariant (C++17)
pair 与 tuple
(C++11)
(C++17)
swap 、 forward 与 move
(C++14)
(C++11)
(C++11)
初等字符串转换
(C++17)
(C++17)
类型运算
(C++11)
(C++17)
 
类型支持
基本类型
基础类型
定宽整数类型 (C++11)
byte
(C++17)
数值极限
C 数值极限接口
运行时类型信息
类型特性
类型类别
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
类型属性
(C++11)
(C++11)
(C++11)
(C++14)
(C++11)
(C++11)(C++17中过时)
(C++11)
类型特性常量
元函数
(C++17)
端序
(C++20)
受支持操作
关系与属性查询
(C++11)
(C++11)
(C++11)
(C++11)
类型修改
(C++11)
(C++11)
(C++11)
类型变换
(C++11)
(C++11)
(C++17)
(C++11)(C++17中过时)
(C++17)
 
定义于头文件 <cstddef>
enum class byte : unsigned char {} ;
(C++17 起)

std::byte 是一种独立类型,它实现指定于 C++ 语言定义中的字节的概念。

charunsigned char ,它能用于访问其他对象所占据的生内存(对象表示),但不同于这些类型,它不是字符类型且非算术类型。一个 byte 只是位的汇集,且只有逐位逻辑运算符对它有定义。

目录

[编辑] 非成员函数

std::to_integer

template <class IntegerType>
 constexpr IntegerType to_integer(std::byte b) noexcept;
(C++17 起)

等价于: return IntegerType(b); 此重载仅若 std::is_integral_v<IntegerType> 为 true 才参与重载决议。

std::operator<<=,operator>>=

template <class IntegerType>
 constexpr std::byte& operator<<=(std::byte& b, IntegerType shift) noexcept;
(1) (C++17 起)
template <class IntegerType>
 constexpr std::byte& operator>>=(std::byte& b, IntegerType shift) noexcept;
(2) (C++17 起)
1) 等价于: return b = std::byte(static_cast<unsigned char>(b) << shift); 此重载仅若 std::is_integral_v<IntegerType> 为 true 才参与重载决议。
2) 等价于: return b = std::byte(static_cast<unsigned char>(b) >> shift); 此重载仅若 std::is_integral_v<IntegerType> 为 true 才参与重载决议。

std::operator<<,operator>>

template <class IntegerType>
 constexpr std::byte operator <<(std::byte b, IntegerType shift) noexcept;
(1) (C++17 起)
template <class IntegerType>
 constexpr std::byte operator >>(std::byte b, IntegerType shift) noexcept;
(2) (C++17 起)
1) 等价于: return std::byte(static_cast<unsigned char>(b) << shift); 此重载仅若 std::is_integral_v<IntegerType> 为 true 才参与重载决议。
2) 等价于: return std::byte(static_cast<unsigned char>(b) >> shift);

此重载仅若 std::is_integral_v<IntegerType> 为 true 才参与重载决议。

std::operator|=,operator&=,operator^=

constexpr std::byte& operator|=(std::byte& l, std::byte r) noexcept;
(1) (C++17 起)
constexpr std::byte& operator&=(std::byte& l, std::byte r) noexcept;
(2) (C++17 起)
constexpr std::byte& operator^=(std::byte& l, std::byte r) noexcept;
(3) (C++17 起)
1) 等价于: return l = std::byte(static_cast<unsigned char>(l) | static_cast<unsigned char>(r));
2) 等价于: return l = std::byte(static_cast<unsigned char>(l) & static_cast<unsigned char>(r));
3) 等价于: return l = std::byte(static_cast<unsigned char>(l) ^ static_cast<unsigned char>(r));

std::operator|,operator&,operator^,operator~

constexpr std::byte operator|(std::byte l, std::byte r) noexcept;
(1) (C++17 起)
constexpr std::byte operator&(std::byte l, std::byte r) noexcept;
(2) (C++17 起)
constexpr std::byte operator^(std::byte l, std::byte r) noexcept;
(3) (C++17 起)
constexpr std::byte operator~(std::byte b) noexcept;
(4) (C++17 起)
1) 等价于: return std::byte(static_cast<unsigned char>(l) |
static_cast<unsigned char>(r));
2) 等价于: return std::byte(static_cast<unsigned char>(l) &
static_cast<unsigned char>(r));
3) 等价于: return std::byte(static_cast<unsigned char>(l) ^
static_cast<unsigned char>(r));
4) 等价于: return std::byte(~static_cast<unsigned char>(b));

[编辑] 注意

由于 C++17 放松的 enum class 初始化规则,数值 n 能用 std::byte{n} 转换成 byte 值。

byte 能用 std::to_integer 转换成数值(例如生成对象的整数哈希)。

[编辑] 示例