IO in c++
IO in C++
我们一直使用 cin 和 cout 来进行从控制台的输入输出,但实际上,c++语言并未定义任何输入输出语句,取而代之的是使用标准库里的stream(流)的机制来提供IO操作
how to understand stream
“ 流 ”在C++中表示的是一个对象,也就是一个封装的类对象;cin和cout都是一个流类的对象
- cin是istream的对象,是标准的输入
- cout是ostream的对象,是标准的输出
- 两个类分别重载了»和«运算符,用来读取和输出数据
标准库定义了许多类型的IO,分别保存在三个头文件中
- iostream(istream和ostream都继承于它)
- fstream(用于向文件的IO)
- sstream(用于string的IO)
problem of stream
IO操作很可能发生错误,有的错误可以引起很大的问题,所以我们需要检查流的状态,比如像下面这样:
1
2
3
4
while(cin >> val)
{
...;
}
但是上面我们说过,cin是一个对象,对象不会返回值;上面的语句调用cin的operator»函数,函数有返回值,返回值给了cin,也就是将状态返回给了cin,那么如何判断cin呢?
实际上原理是while(cin)时,while重载了()运算符,当发现()中的对象是流对象时,就将该对象转化成指针;同时流类重载了operator void*()来将流类对象转化成指针