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

2024-04-19

cppreference 页面位于std::setbase http://en.cppreference.com/w/cpp/io/manip/setbase says:

除 8、10 或 16 之外的基值会将基域重置为零,这对应于十进制输出和依赖于前缀的输入。

怎么会?

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

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


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

话虽这么说,该标准主要形式化了标准前的 iostream 实现,其中许多可能只是为了达到与printf,仅支持十进制、八进制和十六进制(通过临时的、非通用的语法)。

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 std::setbase(2) 不切换到二进制输出? 的相关文章

随机推荐

  • 如何使用 WndProc 作为类函数[重复]

    这个问题在这里已经有答案了 我正在尝试创建一个包含 WndProc 的类 但出现错误 Error 2 error C2440 cannot convert from LRESULT stdcall Client HWND UINT WPAR
  • 如何在 WPF 应用程序中捆绑 View、ViewModel 和 DataTemplate 以便于重用?

    情况 我想创建一个由 ViewModel 驱动的灵活应用程序 基本流程是这样的 设计主ViewModel 创建一个 UserControl 作为视图 并为主 ViewModel 创建一个 DataTemplate 以选择该视图 如果有子组件
  • 使用 Django 模型表单 + 表单向导 + Crispy - 不进行第二步

    我对 django 中的表单相当陌生 我的问题是我有一些非常大的模型 我必须将它们分解成一系列较小的表单以供用户填写 所以我一直在尝试使用脆皮表单 昨天在 YouTube 上观看 Mike Hibberts 教程 Python Django
  • 使用 Python (OpenCV) 中的霍夫线变换从模拟时钟读取时间

    我一直在尝试编写一个程序 在图片上找到钟面 然后继续从中读取时间 定位效果相当好 但阅读时间 不是那么多 cv2 HoughLines 函数返回线条所在的角度 从图像顶部开始测量 以及它们与图像左上角的距离 经过一些调整后 我成功地说服我的
  • 仅从 Internet Explorer 上的文件输入中获取文件名

    我只需要从 HTML 输入文件返回文件名
  • 是否可以将 getopts 与位置参数混合使用?

    我想设计一个 shell 脚本作为几个脚本的包装器 我想指定参数myshell sh using getopts并将其余参数以相同的顺序传递给指定的脚本 If myshell sh执行方式如下 myshell sh h hostname s
  • Android @Override 错误

    今天我终于让我的 facebook 实现工作起来了 当我开始在我的应用程序中实现它时 我通过 Override 收到以下错误 类型的 onComplete Bundle 方法 FBConnectionActivity LoginDialog
  • Windows:如何测试高dpi下的UI?

    我想测试我的应用程序的反应high dpi 设置 我指的不仅仅是 120dpi 我想测试更高的 dpi 设置 例如 150dpi 300dpi 600dpi 1000dpi 1200dpi 我的开发机器的显卡无法达到 300dpi 甚至 1
  • Angular @Input getter/setter 和非原始值

    问题 我希望能够在每次子组件绑定的对象中的属性发生更改时调用一个函数 但是 即使可以明显看到绑定的输入属性正在更新 setter 也只会被调用一次 这一切都是因为需要将子组件绑定到其父组件属性 而父组件属性恰好是具有深度嵌套属性的复杂对象
  • Asp.Net Core 3.1 Cookie 未附加 Razor 页面 C#

    Cookie 没有使用以下代码附加到页面 我尝试将 IsEssential 添加到选项中 但它不起作用 使用 Asp Net Core 3 1 Razor 页面 这是我的大部分startup cs 和附加的cookie 代码 启动 cs p
  • ORDER BY 的列有时为空

    Mysql 看起来像这样 SELECT CompanyName LastName FirstName FROM JOIN ORDER BY CompanyName LastName FirstName 现在的问题是 A 列有时是空的 或者是
  • 为什么尝试使用动态参数调用扩展方法时出现错误 CS1973

    考虑以下代码 internal static class Program public static string ExtensionMethod this string format dynamic args return format
  • 使用 ffmpeg 处理流的解码数据时出错

    我正在使用以下命令 ffmpeg i video1a flv i video1b flv i video1c flv i video2a flv i video3a flv i video4a flv i video4b flv i vid
  • 3D 游戏的 Libgdx 渲染层

    在我的第一个 3D 游戏中 我现在想要渲染地板 它实际上是一个平面 不是 libgdxPlane on y 0 我想添加一个Texture到它 这样我就可以在每个级别有不同的楼层 现在我的问题是 创建和渲染这种纹理地板的最佳方法是什么 我考
  • django 应用程序的 Heroku 推送获取“没有名为 psycopg2.extensions 的模块”

    我正在尝试将 django 应用程序推送到 heroku 并收到一个我在 heroku 或 stackoverflow 论坛中从未见过的错误 我正在使用 postgres 我不知道该从哪里开始 我在任何文档中都没有看到任何说明问题的内容 主
  • 在 TeamCity 构建期间将 nuget 包发布到 Octopus

    有一个已知问题 如果您在 TeamCity 构建期间进行部署 则会部署以前的版本 因为当前版本仅在构建完成后才可用 文档建议创建辅助 TeamCity BuildConfiguration 作为解决方法 但它很糟糕并且似乎不再起作用 有许多
  • 在 AngularJS 中的控制器之间共享数据

    我使用以下工厂从 API 获取数据并将其存储到名为 apiData 的本地变量中 app factory MyFactory function resource q var apiData var service var resource
  • android 清除字符串中的值

    我有一个应用程序 可以让您单击按钮从起始值 20 中添加和减去 5 或 5 以及 1 或 1 我对其进行了设置 这样当单击按钮时 它将将该值放入字符串并显示它 以便用户可以看到他们按下的内容的历史记录 我有一个名为 Reset 的方法 将起
  • 如何在 Android 中播放 GIF

    Hello stackoverflow我正在尝试开发一个 Android 应用程序来玩我自己的GIF 这是代码片段 MainActivity java public class MainActivity extends Activity O
  • 为什么 std::setbase(2) 不切换到二进制输出?

    cppreference 页面位于std setbase http en cppreference com w cpp io manip setbase says 除 8 10 或 16 之外的基值会将基域重置为零 这对应于十进制输出和依赖