首页 > 后端开发 > C++ > 为什么有些 C iomanip 操纵器具有粘性,而其他操纵器(如'std::setw()”)则不然?

为什么有些 C iomanip 操纵器具有粘性,而其他操纵器(如'std::setw()”)则不然?

Mary-Kate Olsen
发布: 2024-12-22 18:02:15
原创
824 人浏览过

Why Are Some C   iomanip Manipulators Sticky While Others, Like `std::setw()`, Are Not?

粘性 Iomanip 操纵器

在 C 中,iomanip 操纵器是流修饰符,用于更改输入和输出流的行为或格式。然而,并非所有操纵器的行为方式都相同。有些是临时的,仅影响下一个插入,而另一些是“粘性”的,在明确更改之前一直有效。

为什么 std::setw() 不粘性?

与大多数其他操纵器不同,std::setw() 不会永久改变流的状态。这是因为它被视为格式化操纵器,其中每次插入都需要明确的宽度规范才能正确对齐。默认情况下,每次插入后它都会重置为零,以避免歧义并保持对格式的控制。

粘性操纵器

以下操纵器是粘性的,这意味着它们仍然有效直到被另一个操纵者改变或明确地改变重置:

  • std::setiosflags
  • std::resetiosflags
  • std::setbase
  • std::setfill
  • std::set precision
  • 全部标志修改操纵器(例如,std::boolalpha、std::showbase)
  • 所有格式化操纵器(例如,std::fixed、std::internal)
  • 所有流状态修饰符(例如,std::ws, std::endl)

std::ios_base::width() 与 std::setw()

std::ios_base::width () 是所有流类型的基类 std::ios_base 的成员函数。它返回字段的当前宽度。然而,它并不直接控制字段宽度;必须使用 std::setw() 来设置字段宽度。

在线参考

请参阅 C 标准库文档以获取 iomanip 操纵器和的完整列表他们的行为。它提供了其功能的详细描述和示例。或者,像 cppreference 网站这样的在线资源提供了有关操纵器的完整信息,包括它们的粘性。

以上是为什么有些 C iomanip 操纵器具有粘性,而其他操纵器(如'std::setw()”)则不然?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板