下次当你为控制台输出的格式而苦恼时,请参考这篇文章及其速查表。
我写文章主要是为了给自己写文档。我在编程时非常健忘,所以我经常会写下有用的代码片段、特殊的特性,以及我使用的编程语言中的常见错误。这篇文章完全切合我最初的想法,因为它涵盖了从 C++ 控制台格式化打印时的常见用例。
像往常一样,这篇文章带有大量的例子。除非另有说明,代码片段中显示的所有类型和类都是 std
命名空间的一部分。所以当你阅读这段代码时,你必须在类型和类的前面加上using namespace std;
。当然,该示例代码也可以在 GitHub 上找到。
面向对象的流
如果你曾经用过 C++ 编程,你肯定使用过 cout。当你包含 时,ostream 类型的
cout
对象就进入了作用域。这篇文章的重点是 cout
,它可以让你打印到控制台,但这里描述的一般格式化对所有 ostream 类型的流对象都有效。ostream
对象是 basic_ostream
的一个实例,其模板参数为 char
类型。头文件 是
的包含层次结构的一部分,包含了常见类型的前向声明。
类 basic_ostream
继承于 basic_ios
,该类型又继承于 ios_base
。在 cppreference.com 上你可以找到一个显示不同类之间关系的类图。
ios_base
类是所有 I/O 流类的基类。basic_ios
类是一个模板类,它对常见的字符类型进行了 模板特化 specialization ,称为 ios
。因此,当你在标准 I/O 的上下文中读到 ios
时,它是 basic_ios
的 char
类型的模板特化。
格式化流
一般来说,基于 ostream
的流有三种格式化的方法。
ios_base
提供的格式标志。
和
中定义的流修改函数。