C++ Primer 笔记——IO类
1.C++语言并未定义任何输入输出语句,取而代之,包含了一个全面的标准库来提供IO机制。
由上图能够知道,I/O操作的基类是ios_base,各个类的用途例如以下:
- <iostream>
- istream 从流中读取数据
- ostream 向流中写数据
- iostream 对流进行读写操作。派生于istream和ostream
- <fstream>
- ifstream 从文件里读取数据。派生于istream
- ofstream 向文件里写数据,派生于ostream
- fstream 读写文件, 派生于iostream
- <sstream>
- istringstream 读取string对象。派生于istream
- ostringstream 写string对象。派生于ostream
- stringstream 读写string对象,派生于iostream
2.C与C++处理输入输出的方式不同,我们从C语言的输入输出可以很明显看出是函数调用方式,而C++的则是对象模式,iostream类是派生于ostream类和istream类,而cout和cin是ostream类和istream类的对象。
3. std::endl 实质上是一个函数,它做了两件事情:输出一个 '\n' 并刷新缓冲区。
// VS2015编译器上的定义 // MANIPULATORS template<class _Elem,class _Traits> inlinebasic_ostream<_Elem, _Traits>&__CLRCALL_OR_CDECL endl(basic_ostream<_Elem, _Traits>& _Ostr){ // insert newline and flush stream_Ostr.put(_Ostr.widen('\n'));_Ostr.flush();return (_Ostr);}
// 以下三个语句是等价的std::cout << std::endl;std::cout << &std::endl;std::cout << '\n' << std::flush;
4.因为系统在空闲的时候会不停的检查缓冲区,如果发现新内容,将刷新缓冲区,这也是为什么我们不用std::endl或std::flush时也可以正常输出的原因。
5.当从键盘向程序输入数据时,对于如何指出文件结束,不同操作系统有不同的约定。在Windows系统中,输入文件结束符的方法是Ctrl + Z,然后按Enter或Return键。在UNIX系统中,包括Mac OS X系统中,文件结束符输入是用Ctrl+D。
6.由IO对象不能拷贝,所以不能将形参或返回类型设置为流类型,通常以引用的方式传递和返回流,而且不能是const类型。
7.IO类定义的一些函数和标志,可以帮助我们访问和操纵流的条件状态。
8.一个流一旦发生错误,其上后续的IO操作都会失败,只有当一个流处于无错状态时,我们才可以从它读取或写入数据。
9.每个流都管理一个缓冲区,用来保存程序读写的数据,导致缓冲刷新的原因有很多:
- 程序正常结束
- 缓冲区满
- 调用endl或flush或ends(ends向缓冲区插入一个空字符,然后刷新缓冲区。)
- 每个输出操作之后,我们可以用操作符unitbuf设置流的内部状态,来清空缓冲区。默认情况下,对cerr是设置unitbuf的,因此写到cerr的内容都是立即刷新的。
- 一个输出流可能被关联到另一个流,当读写被关联的流时,关联到的流的缓冲区会被刷新。例如默认情况下,cin和cerr都关联到cout,因此读cin或写cerr都会导致cout的缓冲区刷新。
std::cout << std::unitbuf; // 所有输出操作后都会立即刷新缓冲区 std::cout << std::nounitbuf; // 回到正常的缓冲方式
int i; std::cin >> i; // 会导致cout的缓冲区被刷新
10.如果程序异常中止,输出缓冲区是不会被刷新的。当一个程序崩溃后,它所输出的数据很可能停留在输出缓冲区中等待打印。
11.我们既可以将一个istream对象关联到另一个ostream,也可以将一个ostream关联到另一个ostream,每个流同时最多关联到一个流,但是多个流可以同时关联到一个ostream。
std::cin.tie(&std::cout); //标准库将cin和cout关联在一起 std::ostream *old_tie = std::cin.tie(nullptr); // old_tie指向当前关联到cin的流(如果没有则是空),cin不再与其他流关联 std::cin.tie(&std::cerr); // 读取cin会刷新cerr而不是cout
文件输入输出
1.除了继承自iostream类型的行为之外,fstream中定义的类型还增加了一些新的成员来管理与流关联的文件。
2.创建文件流对象时,如果提供文件名,则open会被自动调用。
3.一旦一个文件流已经打开,它就保持与对应文件的关联。对于一个已经打开文件流调用open会失败。当一个fstream对象被销毁时,close会被自动调用。
4.每个流都有一个关联的文件模式,用来指出如何使用文件。
默认情况下当我们打开一个ofstream时,文件的内容会被丢失。可以指定app模式避免。而且只要trunc没有被设定,就可以设定app模式。
string类
1.sstream中增加了一些成员来管理与流相关的操作。
转载于:https://www.cnblogs.com/zoneofmine/p/7221711.html
C++ Primer 笔记——IO类相关推荐
- C++primer第八章 IO库 8.1 IO类
IO库设施 istream (输入流)类型,提供输入操作. ostream (输出流)类型,提供输出操作. cin,-个 istream对象,从标准输入读取数据. cout, 一个ostream对象 ...
- c++进阶---IO类的详细介绍(一)
IO类 c++为了更好的处理不同的种类的IO的操作,IO库中定义了庞大的类库来处理不同种类的IO操作,该类库组成如下图所示: 首先,我们先了解一下这个庞大的IO库各个类之间的关系. ios是最基本的父 ...
- C++Primer笔记——拷贝控制
CHAPTER13-拷贝控制(C++ Primer笔记) 13.1 拷贝.赋值与销毁 13.1.1 拷贝构造函数 13.1.2 拷贝赋值运算符 13.1.3 析构函数 13.1.4 三/五法则 13. ...
- ASM学习笔记2 - 类的创建和修改 —— ClassWriter的综合应用
ASM学习笔记2 - 类的创建和修改 -- ClassWriter的综合应用 上回我们说到,通过使用ClassVisitor和ClassReader,我们能够分析已经存在的类.这一节中,我们将使用Cl ...
- c++语言文件流,C++ IO类、文件输入输出、string流详细讲解
新的C++标准中有三分之二的内容都是描述标准库.接下来重点学习其中几种核心库设施,这些是应该熟练掌握的. 标准库的核心是很多容器类(顺序容器和关联容器等)和一簇泛型算法(该类算法通常在顺序容器一定范围 ...
- [C++]C++中的IO类
C++中的IO类 C++语言不直接处理输入输出,而是通过一组定义在标准库中的类型来处理IO.这些类型支持从设备读取数据,向设备写入数据的IO操作,设备可以是文件,控制台窗口等.还有一些类型允许内存IO ...
- C++ 流的操作 | 初识IO类、文件流、string流的使用
文章目录 前言 IO头文件 iostream fstream sstream 流的使用 不能拷贝或对 IO对象 赋值 条件状态与 iostate 类型 输出缓冲区 文件流 fstream类型 文件模式 ...
- Xamarin开发笔记—设备类amp;第三方弹窗的使用和注意事项
一.设备类是Xamarin重要开发组成部分,下面介绍一下设备类的主要用法: //唤醒打电话 Device.OpenUri(new Uri("tel:180xxxxxxxx")); ...
- Xamarin开发笔记—设备类第三方弹窗的使用和注意事项
一.设备类是Xamarin重要开发组成部分,下面介绍一下设备类的主要用法: //唤醒打电话 Device.OpenUri(new Uri("tel:180xxxxxxxx"));/ ...
最新文章
- thinkphp5.1嵌套关联预载入的写法
- 【Android 安装包优化】WebP 图片格式性能测试 ( 测试 WebP 图片解码速度 | 测试 WebP 图片编码速度 )
- ERP系统开发平台 (C#语言,支持多数据库)
- 最长回文子串Python解法
- 2021年Z世代“潮力量”洞察报告
- ctfshow-萌新-web5( 利用位运算符控制SQL获取网站敏感信息)
- Windows多线程应用程序的编译和链接
- Spring Cloud学习系列第三篇【服务容错保护】
- Python安装包下载、环境配置与工具包安装教程(详细版)
- html5 文本框只能输入正整数,控制input文本框只能输入正整数
- html怎么缩进字符间距,css字符间距(css文字间距怎么设置)
- 计算机视觉论文-2021-11-03
- Python指纹识别
- idea中maven打包报错:Compilation failure: Compilation failure
- 一键部署k8s集群(三节点)
- 什么是 SRE?一文详解 SRE 运维体系
- 【2019蓝桥杯国赛B组】排列数
- java 图形界面
- 用于私网的IP地址段
- Apple新发布的APFS文件系统对用户意味着什么
热门文章
- 荒野行动pc版服务器无响应,荒野行动PC版闪退怎么办 电脑版闪退解决方法
- eNSP路由器接口地址通过DHCP分配
- [转载]如何用JDO开发数据库应用(3)
- 已知某分页系统,主存容量为 64K 字节,页面大小为 1K,对一个 4 页大的作 业,其 0、1、2、3 页分别被分配到主存的 2、4、6、7 块中,试:将十进制的逻 辑地址 1023、2500、35
- css-富文本编辑显示
- 关于示波器探头的输入容抗问题解决
- 7-2 寻找大富翁 (34 分)
- crosstab交叉表_数据透视之交叉表 crosstab()
- Android Studio获取数字签名(SHA1)
- dva的用法_dva基本用法