【发布时间】:2021-10-29 19:24:56
【问题描述】:
以下代码在 C++20 中无法编译
#include <iostream>
#include <cstddef>
int main(){
std::byte b {65};
std::cout<<"byte: "<<b<<'\n';// Missing overload
}
在C++17中添加std::byte时,为什么没有对应的operator<<重载打印呢?我也许可以理解不打印容器的选择,但为什么不std::byte?它试图充当原始类型,我们甚至为std::string、最近的std::string_view 和也许是最相关的 std::complex、和std::bitset 本身提供了重载.
还有std::hex和类似的修饰符,所以默认打印0-255应该不是问题。
这只是疏忽吗? operator>>,std::bitset 有呢,一点都不小。
编辑:发现甚至可以打印std::bitset。
【问题讨论】:
-
也许对于它应该格式化为字符还是整数存在分歧。在我看来,如果不是为您做出选择,而是由您决定,那么它作为一种类型会更灵活。
-
@PatrickRoberts 也许,但
std::byte的意义不是unsigned char,所以我不希望有一个角色。也许根本没有必要。
标签: c++ stdout c++20 string-view std-byte