本文介绍
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
流状态的查询和控制
(
在保证程序的可靠性时经常遇到的问题
)