1 C++输入输出综述
C++ IO首先建立在为Unix环境开发的原始库函数上;ANSI C正式承认这个库时,将其称为标准输入/输出包;
IO相关类定义在头文件iostream和fstream,这些类不是正式语言定义的组成部分,cin,istream都不是关键字。
1.1 流和缓冲
(1)流简介:
C++程序将输入和输出看作字符流;对于输入来说,程序从输入流中抽取字符,对于输出来说,程序向输出流中插入字符;
输入流可以来自键盘、存储设备或者其他程序;输出流可以输出至显示器、打印机、存储设备或者其他程序。
流是程序与流源或流目的之间的中介,这样C++就可以对来源不同的字符做相同处理。
(2)管理输入:
两个阶段:将流与程序绑定在一起,将流与源绑定在一起
(3)管理输出:
两个阶段:将流与目的绑定在一起,将流与程序绑定在一起
(4)缓冲区简介
缓冲区就是一块存储空间,它是为了匹配程序处理速度和外设处理速度;比如程序一次处理1byte,但是磁盘一次读取512bytes;又或者程序一次处理1byte,可以1byte地从磁盘读取,但是由于硬件读取一次数据复杂且操作慢,因此使用缓冲区可以加快程序处理速度。
flushing the buffer:刷新缓冲区就是清空缓冲区地内容以备下次使用。
1.2 输入输出中比较重要的类
streambuf:提供缓冲区,有成员方法 填满缓冲区、获取缓冲区内容、刷新缓冲区、管理缓冲区
ios_base:表示流的一般属性 比如文件是否打开、是二进制流还是文本流等等
ios:基于ios_base,并且它包含了一个指针成员指向一个streambuf对象
ostream:继承自ios类并提供了输出方法
istream:继承自ios类并提供了输入方法
iostream:继承自ostream类和istream类
1.3 C++11 I/O新特性
ostream.h转换为ostream,将ostream类放置到std命名空间中
I/O类被重写,开发了I/O类模板包括basic_istream<charT,traits>和basic_ostream<charT, traits>。实现了char,wchar_t具体化;istream和ostream是char的具体化,cout输出字符流,wistream和wstream是wchar_t的具体化,wcout用于输出宽字符流。
ios基类中的一些独立与类型的信息被移动到ios_base类中,比如格式化常量ios::fixed变为ios_base::fixed,还新增了一些常量
1.4 包含iostream头文件时会自动创建八个流对象(4个用于窄字符流,4个用于宽字符流)
cin对象:对应标准输入流,默认情况下这个流与标准输入设备匹配(键盘);wcin对象用于wchar_t类型;
cout对象:对应标准输出流,默认情况下这个流与标准输出设备匹配(显示器),借助streambuf管理流;wcout对象用于wchar_t类型;
cerr对象:对应于标准错误流(可以用于显示错误信息),默认情况下这个流与标准输出设备匹配(显示器),这个流是不缓冲的;wcerr对象用于wchar_t类型;不受重定向的影响,即使重定向了输入输出流,错误信息还是打印到显示器上
clog对象:对应于标准错误流,默认情况下这个流与标准输出设备匹配(显示器),这个流是缓冲的;wclog对象用于wchar_t类型。不受重定向的影响,即使重定向了输入输出流,错误信息还是打印到显示器上
1.4 重定向
修改标准输入和标准输出关联的工具。(比如输出到文件,而不是显示器)
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。