输入/输出

输入/输出库
click on an element for detailed information

iostream 库是一个面向对象的库,使用流提供输入和输出功能。

流是一种抽象,代表在其上执行输入和输出操作的设备。流基本上可以表示为一个无限长度的字符源或目标。

流通常与一个物理字符源或目标相关联,例如磁盘文件、键盘或控制台,因此从我们称之为流的抽象中获取或写入的字符会物理地输入/输出到物理设备。例如,文件流是用于操作和与文件交互的 C++ 对象;一旦使用文件流打开文件,在该流上执行的任何输入或输出操作都会物理地反映在文件中。

为了操作流,C++ 提供了标准的iostream库,其中包含以下元素

基本类模板
iostream 库的基础是类模板的层次结构。类模板以类型无关的方式提供了库的大部分功能。

这是一组类模板,每个类模板都有两个模板参数:字符类型 (charT) 参数,它决定了要操作的元素类型;以及 traits 参数,它为特定类型的元素提供了额外的特性。

这个类层次结构中的类模板与其字符类型实例化的名称相同,但带有前缀basic_。例如,istream实例化的类模板叫做basic_istream,而fstream实例化的叫做basic_fstream,等等……唯一的例外是ios_base,它本身是类型无关的,因此不是基于模板,而是一个常规类。

类模板实例化
该库包含了整个 iostream 类模板层次结构的两套标准实例化:一套是窄向的,用于操作char类型的元素;另一套是宽向的,用于操作wchar_t.

类型的元素。窄向(char类型)的实例化可能是 iostream 库中更为人所知的部分。像ios, istream、ofstream这样的类都是窄向的。本页顶部的图表显示了窄向类的名称和关系。

宽向(wchar_t)实例化的类遵循与窄向实例化相同的命名约定,但每个类和对象的名称都以w字符为前缀,例如构成wios, 、wistream、wofstream等。

标准对象
作为 iostream 库的一部分,头文件<iostream>声明了某些用于在标准输入和输出上执行输入和输出操作的对象。

它们分为两组:窄向对象,即广为人知的cin, 、cout, 、cerr、clog,以及它们对应的宽向对象,声明为wcin, 、wcout, 、wcerr、wclog.

类型
iostream 类在其成员的原型中很少使用基本类型。它们通常使用定义的类型,这些类型取决于其实例化中使用的 traits。对于默认的charwchar_t实例化,使用streampos, 、streamoff和 streamsize类型来分别表示位置、偏移量和大小。

操纵符
操纵符是全局函数,设计用于与在iostream流对象上执行的插入 (<<) 和提取 (>>) 运算符一起使用。它们通常修改流的属性和格式设置。endl, 、hex和 scientific是操纵符的一些例子。

组织结构

该库及其类层次结构被分割在不同的文件中
  • <ios>, <istream>, <ostream>, <streambuf><iosfwd>通常不会在大多数 C++ 程序中直接包含。它们描述了层次结构的基类,并由库中包含派生类的其他头文件自动包含。
  • <iostream>声明了用于通过标准输入和输出进行通信的对象(包括cin、cout).
  • <fstream>定义了文件流类(如模板basic_ifstream或类、ofstream)以及与这些类一起使用的内部缓冲对象(basic_filebuf)。这些类用于使用流来操作文件。
  • <sstream>:此文件中定义的类用于将 string 对象当作流来操作。
  • <iomanip>声明了一些带参数的标准操纵符,与提取和插入运算符一起使用,以修改内部标志和格式选项。

兼容性说明

本参考中为 iostream 类包含的名称、原型和示例主要描述和使用char类模板的实例化,而不是模板本身,尽管这些类只是其可能的实例化之一。我们认为这提供了更好的可读性,并且从char实例化中获取基本模板的名称和原型与反向操作一样简单。

iostream 库的元素(char 实例化)

:

对象:

类型:

操纵符: