【问题标题】:Is There an Official Resource for Sticky Manipulators [duplicate]是否有粘性操纵器的官方资源[重复]
【发布时间】:2016-10-31 11:52:35
【问题描述】:

标准是否定义了哪些iomanip 操纵器是粘性的,哪些不是?

我不断发现自己指的是:https://stackoverflow.com/a/1533222/2642059

这是一个很好的答案,但甚至说:

在我的版本上

再加上我在http://en.cppreference.comhttp://www.cplusplus.com 上找不到sticky 的概念,这让我想知道这是否是一个实现定义的概念。

【问题讨论】:

  • 它们都是粘性的,除了setw,它受到标准操作员在操作结束时调用width(0)的要求的影响。
  • @downvoters 我可以得到拒绝投票的理由吗?这个问题有什么问题吗(除了对标有 C++ 的问题的强制反对?)
  • @underscore_d 是的,我同意。那里的答案也更好。我已将此标记为重复。

标签: c++ language-lawyer standards sticky iomanip


【解决方案1】:

不是“官方”,但 cppreference.com 在std::setw 中说

如果调用以下任何函数,则流的宽度属性将重置为零(表示“未指定”):

作为 cppreference says 中的编辑历史,此列表是通过对“宽度”的标准草案进行 grep 编译的

所有其他操纵器都是“粘性的”,例如,它们执行的流状态更改会持续存在,直到再次显式更改。

【讨论】:

    【解决方案2】:

    标准 C++ 库中并没有真正的粘性/非粘性操纵器的概念。标准 C++ 库中唯一的非粘性操纵器是 width()。作为输入或输出的一部分,其他标准格式标志均未更改。用户操作员做什么以及是否在使用后重置设置完全取决于他们。

    【讨论】:

    • 是否有任何文档警告setw 被踩踏而其他操纵者没有发出警告?似乎所有修饰符都没有警告可能是正式声明的良好基础?
    • @JonathanMee:正如博在评论中提到的那样,影响width() 的标准库操作员小心地声明他们调用width(0)。没有这样的警告。在调用width(0) 的标准上散布着大约几十个左右的位置(我发现字符串、语言环境和 IOStreams 章节分散在 8 个位置)。
    • @JonathanMee cppreference 尝试枚举en.cppreference.com/w/cpp/io/manip/setw处的所有宽度踩踏
    • @Cubbi 你知道我试图自己写这个列表,并证明setw 是在其他操纵者没有的标准要求下被践踏的。但是读到这个......我想接受一个带有副本和链接到这个列表的答案。
    猜你喜欢
    • 2018-07-07
    • 1970-01-01
    • 2023-01-12
    • 2017-09-02
    • 2017-10-23
    • 2015-09-18
    • 1970-01-01
    • 2012-04-08
    • 2018-11-07
    相关资源
    最近更新 更多