如何使用`std :: basic_istream <std :: byte>`

时间:2017-05-02 10:42:50

标签: c++ io std c++17

此问题旨在将std::byte与标准输入输出结合使用。

是否有计划在未来的标准中为read(_bytes)write(_bytes)的{​​{1}}和basic_istream<CharT>接口添加适当的函数重载?有什么理由反对呢?我知道应该保留basic_ostream<CharT> - 重载。如何使用CharT*?我目前在我的项目函数中定义

std::byte

这些使用std::istream& read(std::istream&, std::byte*, std::streamsize) std::ostream& write(std::ostream&, const std::byte*, std::streamsize) reinterpret_cast<>char*但我认为这取决于const char*的大小。我错了吗? char总是char吗?

我尝试制作1 byte,但缺少std::basic_istream<std::byte>等等。有人做过这种事吗?

2 个答案:

答案 0 :(得分:7)

<强>唐&#39;吨

您是否以&#34;文字模式&#34;或者&#34;二进制模式&#34;,你还在做什么从根本上是对字符采取行动。

std::byte不是出于此目的,而且这就是为什么它没有这些功能。实际上,它是故意引入而不是来拥有它们!

  

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

     

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

     

charunsigned char类似,它可用于访问其他对象(object representation)占用的原始内存,但与这些类型不同,它不是字符类型,不是算术类型。一个字节只是一个位集合,只为它定义了按位逻辑运算符。

     

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

  

有没有人让这种事情发挥作用?

不,如上所述,每个人都故意没有。

使用charunsigned char,就像我们已经做了几十年一样!

答案 1 :(得分:0)

P2146: Modern std::byte stream IO for C++是与您的请求有关的建议。在Github上跟踪状态。