gpt4 book ai didi

c++ - 为什么 std::setbase(2) 不切换到二进制输出?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:30:23 32 4
gpt4 key购买 nike

The cppreference page on std::setbase说:

Values of base other than 8, 10, or 16 reset basefield to zero, which corresponds to decimal output and prefix-dependent input.

怎么会?

仅支持这些碱基是否有特殊原因?支持至少 16 个(实际上,最多 36 个:0-9,然后是 a-z)而不必做出任何困难的选择似乎是微不足道的。具体来说,2 是一个流行的基础,我认为应该对 std::setbase(2)(以及相应的 std::binary)感兴趣。

我显然可以打印我自己的位,但如果我的 ostream 能做到这一点就好了。

最佳答案

唯一肯定的答案是“因为标准是这么说的”。

话虽这么说,该标准主要是对准标准 iostream 实现进行了形式化,其中许多可能只是为了与 printf 实现功能对等而设计的,后者仅支持十进制、八进制和十六进制(通过 ad -hoc,不是真正通用的语法)。

此外,现在修补 iostream API 以支持“许多”基数并不是一件容易的事,因为基数设置最终进入位域,而不是在单独的“当前基数”字段中。

现在,标准要求 fmtflags 是某种“位掩码类型”——甚至可能是 std::bitset,因此您可能会找到一种方法来铲除所有这些新的“基本”字段都以某种方式 - 但它真的值得付出努力(加上破坏假定 fmtflags 是整数类型的代码的风险)以获得几乎没有人真正关心的功能?

因此,总结一下:糟糕的初始设计(实际上就像 iostream 的其余部分)、重要的修复以及没有真正的用户需求这样的功能。

关于c++ - 为什么 std::setbase(2) 不切换到二进制输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36702896/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com