本文介绍 C++ IO 标准库的基础知识。参考 C++ Primer P.244
IO 标准库提供的多种工具 | |
istream( 输入流 ) 类型 | 提供输入操作。 |
ostream( 输出流 ) 类型 | 提供输出操作。 |
cin | 读入标准输入的 istream 对象。 |
cout | 写到标准输出的 ostream 对象。 |
cerr | 输出标准错误的 ostream 对象。 cerr 常用于程序错误信息。 |
>> 操作符 | 用于从 istream 对象中读入输入。 |
<< 操作符 | 用于把输出写到 ostream 对象中。 |
getline 函数 | 需要分别取 istream 类型和 string 类型的两个引用形参,其功能是从 istream 对象读取一个单词,然后写入 string 对象中。 |
l 面向对象的标准库
IO 类型在 3 个独立的头文件中定义:
iostream | 定义读写控制窗口的类型 |
fstream | 定义读写已命名文件的类型 |
sstream | 用于读写存储在内存中的 string 对象 |
在 fstream 和 sstream 里定义的每种类型都是从 iostream 头文件中定义的相关类型派生而来。
注意:
(1) 国际字符的支持。
每一个 IO 头文件都定义了 char 和 wchar_t 类型的类和标准输入 / 输出对象。
(2) IO 对象不可复制或赋值。
第一个含义:因为只有支持复制的元素类型可以存储在 vector 或其他容器类型里,由于流对象不能复制,因此不能存储在 vector( 或其他 ) 容器中,即,不存在存储流对象的 vector 或其他容器。
第二个含义:形参或返回类型也不能为流类型。如果需要传递或返回 IO 对象,则必须传递或返回指向该流对象的指针或引用。并且,一般情况下,如果要传递 IO 对象以便对它进行读写,可用非 const 引用 的方式传递这个流对象,对 IO 对象的读写会改变它的状态,因此引用必须是非 const 的。
l 条件状态
IO 标准库的条件状态 | |
strm::iostate | 机器相关的整型名,由各个 iostream 类定义,用于定义条件状态 |
strm::badbit | strm::iostate 类型的值,用于指出被破坏的流 |
strm::failbit | strm::iostate 类型的值, 用于指出失败的 IO 操作 |
strm::eofbit | strm::iostate 类型的值,用于指出流已经到达文件结束符 |
s.eof() | 如果设置了流 s 的 eofbit 值,则该函数返回 true |
s.fail() | 如果设置了流 s 的 failbit 值,则该函数返回 true |
s.bad() | 如果设置了流 s 的 badbit 值,则该函数返回 true |
s.good() | 如果流 s 处于有效状态,则该函数返回 true |
s.clear() | 将流 s 中所有 状态值都重设为有效状态 |
s.clear(flag) | 将流 s 中的某个 指定条件状态设置为有效。 flag 的类型是 strm::iostate |
s.setstate(flag) | 将流 s 添加 指定条件。 flag 的类型是 strm::iostate |
s.rdstate() | 返回 流 s 的当前条件,返回值类型为 strm::iostate |
流状态的查询和控制 ( 在保证程序的可靠性时经常遇到的问题 )