时间:2021-05-20
输入输出是每一种编程语言必不可少的部分,c++也不例外,下面我们就来说明c++的标准输入输出的前世今生。
iostream是现在C++中规定的标准,目的在于使C++代码用于移植和混合嵌入时不受扩展名.h的限制,避免因为.h而造成的额外的处理和修改。
iostream包含的基本功能和对应的iostream.h相同,iostream中定义的内容都在命名空间std中,而iostream.h是为了对c语言进行兼容,所以将标准输入输出功能都定义在全局空间中,他们的使用方法也是不一样的,另外推荐直接使用iostream,毕竟iostream.h是很多年前的老物件了,标准c++中已经明确不适用了,以后有可能被淘汰。
注意:在标准化的过程中,库中有些部分的细节被修改了,所以旧头文件和新头文件中的实体不一定完全对应
这里看一下他们使用上的不同:
#include<iostream.h>或者是 #include<iostream>using namespace std;可见凡是要使用标准c++输入输出,都需要加上using namespace std。
要弄清楚c++的输入输出流,必须要从源头找起,从安装文件里面找出输入输出流相关的头文件,大概列一下,相关头文件有以下这些:
上面说到iosfwd对输入输出的类模板做了实例化,我们截取一段代码,如下:
/// Base class for @c char streams. typedef basic_ios<char> ios; //基础类 /// Base class for @c char buffers. typedef basic_streambuf<char> streambuf; /// Base class for @c char input streams. typedef basic_istream<char> istream; /// Base class for @c char output streams. typedef basic_ostream<char> ostream; /// Base class for @c char mixed input and output streams. typedef basic_iostream<char> iostream; /// Class for @c char memory buffers. typedef basic_stringbuf<char> stringbuf; /// Class for @c char input memory streams. typedef basic_istringstream<char> istringstream; /// Class for @c char output memory streams. typedef basic_ostringstream<char> ostringstream; /// Class for @c char mixed input and output memory streams. typedef basic_stringstream<char> stringstream; /// Class for @c char file buffers. typedef basic_filebuf<char> filebuf; /// Class for @c char input file streams. typedef basic_ifstream<char> ifstream; /// Class for @c char output file streams. typedef basic_ofstream<char> ofstream; /// Class for @c char mixed input and output file streams. typedef basic_fstream<char> fstream;为了叙述方便,后续我们直接使用以上实例类来代指模板类,下面用一张图说明这些类之间的关系:
箭头代表继承的关系,然后相应的buf后缀的类是同一列的其他类使用的缓冲区类。
以istream,ostream,iostream三者为例,看一下具体的继承关系,如下:
template<typename _CharT, typename _Traits> class basic_istream : virtual public basic_ios<_CharT, _Traits>;template<typename _CharT, typename _Traits> class basic_ostream : virtual public basic_ios<_CharT, _Traits>;template<typename _CharT, typename _Traits> class basic_iostream : public basic_istream<_CharT, _Traits>, public basic_ostream<_CharT, _Traits>;可以看到basic_istream和basic_ostream都是虚继承于basic_ios,basic_iostream是继承于basic_istream和basic_ostream,注意这里继承于basic_ios的时候之所以要用虚拟继承,是为了防止多重继承时,多个父类共用基类产生二义性。
注:所谓二义性是指basic_iostream类对象会产生两个basic_ios对象,用了虚继承后,就只会产生一个basic_ios对象,从而避免了二义性。
说到这里,我想问一下,有多少人最开始接触iostream的时候首先使用的是cin和cout呢,其实通过iostream头文件,我们可以看到,我们常用的cin对象就是istream的一个实例,而cout则是ostream的实例,标准c++中还声明了ostream的另外两个实例cerr、clog。
到此这篇关于c++标准输入输出流关系的文章就介绍到这了,更多相关c++标准输入输出流关系内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
IO:向设备输入数据和输出数据C++的IO流c++中,必须通过特定的已经定义好的类,来处理IO(输入输出)文件流:对文件进行读写操作头文件:类库:ifstrea
在C++中,对文件的读写可以通过使用输入输出流与流运算符>>和
stdio.h就是指“standardinput&output"意思就是说标准输入输出头文件!所以了,用到标准输入输出函数时,就要调用这个头文件C/C++头文件
C++文件流类与文件流对象文件流是以外存文件为输入输出对象的数据流。输出文件流是从内存流向外存文件的数据,输入文件流是从外存文件流向内存的数据。每一个文件流都有
PHP输入和输出流是通过php://来访问的,它允许访问PHP的输入输出流、标准输入输出和错误描述符,内存中、磁盘备份的临时文件流以及可以操作其他读取写入文件资