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 返回多个值