IO流
在C++中时不直接处理输入输出的,我们使用的是标准IO库来处理IO,这些库支持从文件、控制台窗口等读写数据,当然在C++中还有一些特殊的类型允许内存IO。比如我们就可以通过string进行读写数据。
下面我们先给出基本IO类的库类型和标准头文件
头文件 | 类型 |
---|---|
iostream |
istream,wistream 从流读取数据;ostream,wostream 向流写入数据;iostream,wiostream 读写流 |
fstream |
ifstream,wifstream 从文件读取数据;ofstream,wofstream 向文件写入数据;fstream,wfstream 读写文件 |
sstream |
istringstream,wistringstream 从string读取数据;ostringstream,wostringstream 向string写入数据;stringstream,wstringstream 读写流 |
1.基本IO流
最基本的IO类也就是我们使用最频繁的iostream
,我们最常使用的cin
和cout
就分别是istream
对象和ostream
对象。使用标准库cout
和cin
进行输出输入时必须包含头文件<iostream>
。
1.1 IO对象无拷贝无赋值
对于IO对象来说,我们是不能用它来进行拷贝或者对其赋值的。
ostream out1,out2;
out1 = out2; //错误,不能对IO对象赋值
既然IO流对象不能拷贝或者赋值,而我们又知道C++的函数形参是传值的,那么IO流有时候需要作为函数参数该怎么办呢,是的,在IO流作为函数参数时我们需要以引用方式传递和返回流对象。如下面的print
函数和read
函数分别是通过流进行打印和输入,要是需要打印的话,就要将数据输出到一个输出流ostream
中并返回,我们可以看到此时返回的值是引用类型,而且作为函数参数的ostream
也是一个引用类型。
std::ostream &print(std::ostream&, const SaleItem&);
std::istream &read(std::istream&, SaleItem&);
1.2 IO对象的条件状态
既然IO操作需要控制从设备进行输入输出,那么必然有可能会引发一些错误状态,为此C++IO库定义了一些函数和标志来帮助我们访问流的条件状态。假设有IO类型strm
,我们定义了流s
,下表列举出一些常用的状态标识:
状态名称 | 解释 |
---|---|
strm::iostate | 提供表达表达条件状态的完整功能 |
strm::failbit | 用来指出IO流操作已经失败了 |
strm::badbit | 用来指出IO流已经崩溃 |
strm::eofbit |