C++ Primer 5th笔记(chap 17 标准库特殊设施)IO库 之操纵符

Posted thefist11

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ Primer 5th笔记(chap 17 标准库特殊设施)IO库 之操纵符相关的知识,希望对你有一定的参考价值。

三个IO 库特性: 格式控制、 未格式化IO和随机访问

每个 iostream 对象还维护一个格式状态来控制 IO 如何格式化的细节。
eg. 整型值是几进制、浮点值的精度、 一个输出元素的宽度等

1. 操纵符 ( manipulator )

用来修改流的格式状态,一个操纵符是一个函数或是一个对象, 会影响流的状态, 并能用作输入或输出运算符的运算对象。

类似输入和输出运算符, 操纵符也返回它所处理的流对象, 因此我们可以在一条语句中组合操纵符和数据。

eg. 操纵符endl,
我们将它“ 写” 到输出流, 就像它是一个值一样。 但 endl 不是一个普通值, 而是一个操作: 它输出一个换行符并刷新缓冲区

1.1 用途

用于两大类输出控制:

  • 控制数值的输出形式
  • 控制补白的数量和位置。

大多数改变格式状态的操纵符都是设置/复原成对的:一个操纵符用来将格式状态设置为一个新值, 而另一个用来将其复原, 恢复为正常的默认格式(通常最好在不再需要特殊格式时尽快将流恢复到默认状态)

1.2 boolalpha 操纵符控制布尔值的格式

cout << "default bool values: " << true << " " << false
     << "\\nalpha bool values: " << boolalpha
     << true << " " << false << endl;
//执行结果如下:
default bool values: 1 0
alpha bool values: true false

//设置和取消格式状态
bool bool_val = get_status();
cout << boolalpha    //设置cout的内部状态
<< bool_val
<< noboolalpha;    //将内部状态恢复为默认格式

1.3 指定整型值的进制

操纵符 hex、 oct 和 dec将其改为十六进制、 八进制或是改回十进制

cout << "default" << 20 << " " << 1024 << endl;
cout << "octal" << oct << 20 << " " << 1024 << endl;
cout << "hex" << hex << 20 << " " << 1024 << endl;
cout << "decimal" << dec << 20 << " " << 1024 << endl;

输出:

default: 20 1024
octal: 24 2000
hex: 14 400
decimal: 20 1024

1.4 showbase 操纵符在输出中指出进制

当对流应用 showbase 操纵符时, 会在输出结果中显示进制, 它遵循与整型常量中指定进制相同
的规范:

  • 前导 Ox 表示十六进制。
  • 前导 0 表示八进制。
  • 无前导字符串表示十进制。
cout << showbase;    //当打印整型值时显示进制
cout << "default" << 20 << " " << 1024 << endl;
cout << "in octal" << oct << 20 << " " << 1024 << endl;
cout << "in hex" << hex << 20 << " " << 1024 << endl;
cout << "in decimal" << dec << 20 << " " << 1024 << endl;
cout << noshowbase;    //恢复流状态

输出

default: 20 1024
in octal: 024 02000
in hex: 0x14 0x400
in decimal: 20 1024

1.5 操纵符 noshowbase 恢复 cout 的状态, 从而不再显示整型值的进制。

默认情况下, 十六进制值会以小写打印, 前导字符也是小写的 X。 我们可以通过使用
uppercase 操纵符来输出大写的 X 并将十六进制数字 a-f 以大写输出:

cout << uppercase << showbase << hex
     << "printed in hexadecimal:" << 20 << " " << 1024 << endl;
     << nouppercase << noshowbase << dec << endl;  

输出

printed in hexadecimal: 0X14 0X400

以上是关于C++ Primer 5th笔记(chap 17 标准库特殊设施)IO库 之操纵符的主要内容,如果未能解决你的问题,请参考以下文章

C++ Primer 5th笔记(chap 17 标准库特殊设施)输出补白

C++ Primer 5th笔记(chap 17 标准库特殊设施)bitset类型

C++ Primer 5th笔记(chap 17 标准库特殊设施)正则表达式

C++ Primer 5th笔记(chap 17 标准库特殊设施)tuple 返回多个值

C++ Primer 5th笔记(chap 17 标准库特殊设施)控制输入格式

C++ Primer 5th笔记(chap 17 标准库特殊设施)bitset操作