Iostream

iostream是C++中用于数据的流式输入与输出的头文件，屬於C++标准程式库的一部分。 iostream 为 Input/Output Stream 的缩写，即是輸入/輸出流。「流」是一連串從I/O設備讀寫的字符。 流输入输出库中的大部分类都是模板类，可以适用于不同的字符类型或操作函数（如字符比较）。常用的一些字符类型的流输入输出已经用typedef定义了相应的模板特化实例。 例如，basic_fstream<CharT,Traits>是文件流输入输出的实现的模板类。它的一个特化实例：fstream是basic_fstream<char,char_traits<char>>的类型别名，换句话说，这是basic_fstream的字符类型为char使用默认字符操作集的特化实例。 流输入输出库中的类可分为两类。一是定义了界面的抽象，适用于任何流类型，无论是文件流、内存缓存区流或者网络socket流。二是对具体数据源与数据汇（sink）的流的实现。C++标准库仅实现了文件流与内存缓冲区流。 流输入输出库中的类依据是否实现底层或高层操作可分为两类。实现了底层操作的类称作流缓冲区（stream buffer），处理没有任何格式化功能的字符。这些类极少被编程者直接使用。实现高层操作的类称作流，并提供了不同的格式化能力，是构建于流缓冲区之上的。 下表列出了流输入输出库的所有类的分类： <ios>包含着ios_base与basic_ios的类的定义，负责信息格式化与关联的流缓冲区。 <istream>包含了basic_istream类模板定义，实现了格式化输入 <ostream>包含了basic_ostream类模板定义，实现了格式化输出 <iostream>包含了basic_iostream类模板定义，实现格式化输入输出 <fstream>包含了basic_ifstream, basic_ofstream与basic_fstream类模板定义，实现格式化文件流的格式化输入、输出 <sstream>包含了basic_istringstream, basic_ostringstream与basic_stringstream 类模板定义，实现格式化字符串流的输入输出 <iomanip>包含了格式化manipulator <iosfwd>包含了所有的流输入输出库的前向声明（forward declaration） ios_base与basic_ios是两个类处理底层比特流。ios_base存储格式化信息与流的状态。basic_ios管理关联的流缓冲区。basic_ios通常以特化实例ios与wios出现。basic_ios与ios_base很少被程序员直接使用。通常，它们的功能通过其它派生的类，如iostream。 iostream头文件定义了输入输出流对象：cin, cout, cerr, clog分别为标准输入、输出、错误（无缓冲）、簿记（有缓冲）的流对象。都属于std 名字空间。 cout属于ostream类型，重载了左移位算符。cout左移位算符的运算结果为cout自身，这使得连续的左位移操作输出一串数据成为可能。cerr与clog对象是ostream类型。 cin是istream类型，重载了右位移算符。 输入设备是按照行来把数据移入流输入缓冲区。也就是说，键盘输入数据时，只有按了换行键，这一行数据才进入缓冲区，可以读取。 表达式cin >> ival从标准输入读入一个值。有两种情况会使一个istream对象的bool转型为false：读到EOF（文件结束标志）或遇到一个无效的值（输入流进入fail状态）。可以用该istream对象的成员函数good()来测试，或者直接(bool)cin来测试。 istream对象的bool转型为false的情况下，此后的所有读入动作都是无操作（nop）。直到调用istream对象的成员函数clear()来清除该对象的内部状态。 缺省情况下，输入操作符丢弃空白符、空格符、制表符、换行符以及回车。如果希望读入上述字符，或读入原始的输入数据，一种方法是使用istream的get()成员函数来读取一个字符，另一种方法是使用istream的getline()成员函数来读取多个字符。istream的read(char* addr, streamsize size)函数从输入流中提取size个连续的字节，并将其放在地址从addr开始的内存中。istream成员函数gcount()返回由最后的get()、getline()、read()调用实际提取的字符数。 输入流有三个函数来测试流状态：即bad(), fail()和eof()。ignore()用来抛掉制定个数的缓冲区中的字节。 其它的istream成员函数：putback( char c ) 将字符放回iostream；unget()往回重置“下一个”istream项；peek()返回下一个字符或EOF，但不要提取出来 。 操纵符（manipulator）是使用<<或>>算子修改流的对象. 头文件中iomanip还定义了一些manipulators。 某些环境下并不提供共享版本的C++库。导致程序要静态编译入C++标准库，使得程序的尺寸变大。 使用C++写成的 Hello World 程序如下所示: #include <iostream> using namespace std; int main() { cout << "Hello, world!" << endl; return 0; } 在这段代码中，文件 iostream 中声明了程序所要输入和输出操作的有关信息。 下述代码创建一个文件'file.txt'并写入文本'Hello World'： #include <fstream> int main() { std::ofstream file;// can be merged to std::ofstream file("file.txt"); file.open("file.txt"); file << "Hello world!\n"; file.close();// is not necessary because the destructor closes the open file by default return 0; } ISO/IEC 14882:2003 Programming Languages — C++. [lib.string.streams]/1 Stanley B. Lippman, Josee Lajoie. C++ Primer. Massachusetts: Addison-Wesley. 1999 - third edition: 1109–1112. ISBN 0-201-82470-1.  请检查|date=中的日期值 (帮助) C++ Primer (5th Edition). : 5. ISBN 0-201-72148-1.  Stanley B. Lippman, Josee Lajoie. C++ Primer. Massachusetts: Addison-Wesley. 1999 - third edition: 1112–1120. ISBN 0-201-82470-1.  请检查|date=中的日期值 (帮助) <ios> Visual Studio 2010. Microsoft MSDN: Visual Studio 2010. [28 September 2011]. （原始内容存档于2016-03-10）.  Holzner, Steven. C++ : Black Book. Scottsdale, Ariz.: Coriolis Group. 2001: 584. ISBN 1-57610-777-9. ...endl, which flushes the output buffer and sends a newline to the standard output stream.  MinGW.org: Large executables. [22 April 2009]. （原始内容存档于2020-07-04）.  C++ reference for input/output library （页面存档备份，存于互联网档案馆） Apache C++ Standard Library Iostreams （页面存档备份，存于互联网档案馆） Comprehensive tutorial on formatting output in C++. （页面存档备份，存于互联网档案馆） Apache C++ Standard Library Iostreams （页面存档备份，存于互联网档案馆）