如何使用`std :: basic_istream <std :: byte>`之类的东西

Mai*_*kel 4 c++ io std c++17

此问题旨在使用std::byte标准输入输出.

是否有计划增加适当的功能重载read(_bytes)write(_bytes)到的接口basic_istream<CharT>,并basic_ostream<CharT>在将来的标准是什么?有什么理由反对呢?我知道CharT*应该保留-overloads.我该怎么办std::byte?我目前在我的项目功能中定义

std::istream& read(std::istream&, std::byte*, std::streamsize)
std::ostream& write(std::ostream&, const std::byte*, std::streamsize)
Run Code Online (Sandbox Code Playgroud)

这些使用reinterpret_cast<>char*RESP.const char*但我相信这取决于它的大小char.我错了吗?是char永远1 byte

我试图制作,std::basic_istream<std::byte>但它缺少std::char_traits<std::byte>等等.有人做过这种事吗?

Lig*_*ica 8

别.

无论您是在"文本模式"还是"二进制模式"下运行,您从根本上在做什么都是在角色上进行操作.

std::byte不是为了这个目的,这就是为什么它没有这些功能.事实上,故意介绍不要拥有它们!

enum class byte : unsigned char {} ; (自C++ 17起)

std::byte 是一种独特的类型,它实现了C++语言定义中指定的byte概念.

charunsigned char,它可以被用于访问由其他对象(占用原始内存对象表示),但不同于那些类型,它不是一个字符类型并且不是算术类型.字节只是一个位集合,只为它定义了按位逻辑运算符.

http://en.cppreference.com/w/cpp/types/byte


有人做过这种事吗?

不,正如上面所探讨的那样,每个人都故意不这样做.

使用charunsigned char,正如我们几十年来所做的那样!

  • `std :: byte`将是对文件存储进行"原始"访问的正确类型,就像对内存存储的"原始"访问一样.但是,C++ iostream都包含一个翻译方面,并且不提供"原始"访问,因此`std :: byte`不是iostreams的正确类型. (9认同)
  • @BenVoigt 假设“_std::byte 将是对文件存储的“原始”访问的正确类型”似乎比答案中的陈述“_std::byte 不是用于此目的_”更正确。当然,它不是为了格式化输出,但问题绝对不是关于格式化访问。然而,您还声明“_C++ iostreams [...]不提供“原始”访问_”:但是流未格式化的输入和输出函数怎么样,例如[`read()`](https://en. cppreference.com/w/cpp/io/basic_istream/read) 和 `write()`?他们看起来确实**原始** (3认同)

lee*_*ezu 6

P2146:C++ 的现代 std::bytestream IO是与您的请求相关的提案。状态在Github上跟踪。