Chapter 8 The IO Library
▧ istream(输入流)类型,提供输入操作
▧ ostream(输出流)类型,提供输出操作
▧ cin,一个istream对象,从标准输入读取数据
▧ cout,一个ostream对象,向标准输出写入数据
▧ cerr,一个ostream对象,通常用于输出程序错误信息,写入到标准错误。
▧ >>运算符,用来从一个istream对象读取输入数据
▧ <<运算符,用来向一个ostream对象写入输出数据
▧ getline函数,从一个给定的istream读取一行数据,存入一个给定的string对象中。
8.1 IO类
8.1.1 IO对象无拷贝或赋值
不能拷贝或对IO对象赋值
#include <fstream>
#include <iostream>
int main() {
std::ofstream out1, out2;
out1 = out2; //报错
std::ofstream print(std::ofstream); //如无下一代码编译时未报错
std::cout << print<< std::endl; //添加本行代码后报错报错如下
out2 = print(out2); //报错
}
报错信息
严重性 代码 说明 项目 文件 行 禁止显示状态
错误 LNK2019 无法解析的外部符号 "class std::basic_ofstream<char,struct std::char_traits<char> > __cdecl print(class std::basic_ofstream<char,struct std::char_traits<char> >)" (?print@@YA?AV?$basic_ofstream@DU?$char_traits@D@std@@@std@@V12@@Z),函数 main 中引用了该符号 CPP_Primer_5th H:\C_CPP_CUDA\LearningCPP\CPP_Primer_5th\NoCopyOrAssignForIO_Objects.obj 1
由于不能拷贝IO对象,因此我们也不能将形参或返回类型设置为流类型。进行IO操作的函数通常以引用方式传递和返回流。读取一个IO对象会改变其状态。因此传递和返回的引用不能是const的。
8.1.2 条件状态
条件状态(condition state)
表8.2: IO库条件状态
使用good或fail是确定流的总体状态的正确方法。实际上,我们将流当作条件使用的代码就等价于!fail()。而eof和bad操作只能表示特定的错误。