std::byte 的用途是什么?

问题描述 投票:0回答:1

现在 c++17 有了

std::byte
,我一直在寻找一种方法,将读取文件到
char
的代码转换为将文件读取到
byte
的代码。文件包含字节,而不是一堆整数。

然后我读到了这个问题另一个问题,人们认为将文件读入

byte
是错误的,而将文件读入
char
是正确的。

如果

byte
不是为了访问内存而设计的,以此类推,文件,那么它的目的是什么?正如其他两个问题中引用的:

与 char 和 unsigned char 一样,它可用于访问原始内存 被其他对象占用(对象表示),但与那些对象不同 类型,它不是字符类型,也不是算术类型。 A byte只是位的集合,并且只是按位逻辑运算符 为它定义了。

这听起来像是应该用于读取文件的确切类型,而不是字符。

c++ c++17 byte std-byte
1个回答
23
投票

您可能误解了事情。

byte
非常适合“访问内存”。当存储只是字节序列而不是字符数组时,您打算使用该类型。

Iostream 类型不能专用于

byte
,因为它们是围绕字符作为接口而设计的。也就是说,他们并不将文件视为字节序列;而是将文件视为字节序列。他们将它们视为字符序列。现在,您当然可以通过使用一两次强制转换直接读入
byte
数组。但这不是 iostream 本身的思考方式。

您必须区分 iostream 的工作方式和 files 的工作方式。毕竟,Iostream 只是一个文件 IO 库;它并不是文件 API 的最终目标。

大多数用于读取二进制数据的文件 API 采用

void*
而不是字符数组。
std::fread/fwrite
,等等。

也就是说,你应该将其视为

std::byte
的问题,而不是iostream的问题。只是一长串中的另一个。

© www.soinside.com 2019 - 2024. All rights reserved.