本文摘自:《C++ Primer》中文版第四版,第八章——C++标准IO库
• cin(发音为 see-in):读入标准输入的 istream 对象。
• cout(发音为 see-out):写到标准输出的 ostream 对象。
• cerr(发音为 see-err):输出标准错误的 ostream 对象。cerr 常用于程序错误信息。
• >> 操作符,用于从 istream 对象中读入输入。
• << 操作符,用于把输出写到 ostream 对象中。
表 8.1. IO 标准库类型和头文件
Header | Type |
iostream | istream 从流中读取 ostream 写到流中去 iostream 对流进行读写;从 istream 和 ostream 派生而来 |
fstream | ifstream 从文件中读取;由 istream 派生而来 ofstream 写到文件中去;由 ostream 派生而来 fstream 读写文件;由 iostream 派生而来 |
sstream | istringstream 从 string 对象中读取;由 istream 派生而来 ostringstream 写到 string 对象中去;由 ostream 派生而来 stringstream 对 string 对象进行读写;由 iostream 派生而来 |
图 8.1. 简单的iostream 继承层次
表 8.2. 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 |
1、支持宽字符的类为加上“w”前缀;
2、出于某些原因,标准库类型不允许复制和赋值。所以,只有支持复制的元素类型才能存储在容器里,形参或返回类型也不能为流类型。
3、注意输出缓冲区的刷新;
4、文件流对象在尝试打开新文件时,必须先关闭当前的文件流,且需要调用clear清除该流的状态,以免导致不可预料的bug;
5、打开文件时,要保存文件已存在唯一的方法是显示指定app模式打开;
6、对于fstream对象,以in和out同时打开时,内容不清空。只有out时会被清空;当指定了trunc是无论in都会被清空;
7、ofstream默认是out方式,内容会被清空。故只要是open,建议手动指定模式。
表 8.3 文件模式
in | 打开文件做读操作 |
out | 打开文件做写操作 |
app | 在每次写之前找到文件尾 |
ate | 打开文件后立即将文件定位在文件尾 |
trunc | 打开文件时清空已存在的文件流 |
binary | 以二进制模式进行 IO 操作 |
参考资料:
1、《C++ Primer》中文版第四版,第八章——C++标准IO库