首页 >后端开发 >C++ >哪些 C 流操纵器是粘性的,为什么'setw()”不是?

哪些 C 流操纵器是粘性的,为什么'setw()”不是?

Linda Hamilton
Linda Hamilton原创
2024-12-13 04:37:09954浏览

Which C   Stream Manipulators are Sticky, and Why Isn't `setw()`?

C 中的粘性操纵器

在 C 编程中,操纵器用于修改流的输出格式。某些操纵器以“粘性”方式运行,这意味着它们的效果一直持续到显式更改为止。

为什么 setw() 不粘性?

std::setw( )是非粘性操纵器的一个示例。这意味着它只影响下一次插入操作。使用 setw() 后,宽度设置将重置为其默认值。

是否有其他操纵器粘性?

除 setw() 之外的所有操纵器都是粘性的。这包括:

  • setiosflags
  • resetiosflags
  • setbase
  • setfill
  • set precision
  • setiosflags
  • resetiosflags
  • setbase
  • setfil l
  • set precision
  • [no]boolalpha
  • [no]showbase
  • [no]showpoint
  • [无]showpos
  • [无]skipws
  • [无]unitbuf
  • [无]大写
  • dec/十六进制/八进制
  • 固定/科学
  • 内部/左/右
  • ws/ endl/结束/齐平

之间的差异std::ios_base::width() 和std::setw()

std::setw() 返回一个表示宽度值的对象。该对象可用于设置插入流中的下一个项目的宽度。

std::ios_base::width() 直接设置流的宽度。任何后续插入流的操作都将使用新宽度进行格式化。

在线参考

不幸的是,没有明确的文档明确说明操纵器的粘性行为。但是,可以从 C 标准库文档中推断出该行为。

粘性操纵器示例

以下代码演示了操纵器:

#include <iostream>
#include <iomanip>

using namespace std;

int main() {
  // Set the precision to 2 decimal places
  cout << setprecision(2);

  // Insert a number
  cout << 3.14 << endl;  // Output: 3.14

  // The precision is still set to 2 decimal places
  cout << 1.2345 << endl; // Output: 1.23
}

结论

粘性操纵器是 C 中的一个有用功能,可以帮助控制输出的格式。然而,重要的是要注意他们的行为,以避免意外结果。

以上是哪些 C 流操纵器是粘性的,为什么'setw()”不是?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn