C++ Iostreams用法详解(一)整体掌握
当前位置:以往代写 > C/C++ 教程 >C++ Iostreams用法详解(一)整体掌握
2019-06-13

C++ Iostreams用法详解(一)整体掌握

C++ Iostreams用法详解(一)整体掌握

副标题#e#

小我私家以为C++的iostream用起来长短常利便的,只需要利用简朴的<<和>>运算符就可以利便的 举办各类范例的数据的名目化输入输出。并且C++中的iostream在编译阶段完成输入输出的名目化理会的,比C 中的printf()和scanf()在运行时名目化理会要越发安详和强大。在这个系列中我就来具体的先容一下C++中各 种输入输出流的用法。

首先来大抵相识一下C++中的iostreams,我们用到的所有的相关的内容城市定 义在下面的这些头文件里:

<fstream>    <iomanip>
<ios>    <iosfwd>
<iostream>    <istream>
<ostream>    <sstream>
<streambuf>    <strstream>

这个中我们用到最多的大概就是<iostream>,毕 竟险些任何C++的教程城市以这个基本。虽然这个头文件内里尚有一些我们大概没有用到过的全局工具,在这 里也全部列出来:

cerr        Specifies the cerr global stream.           
cin         Specifies the cin global stream.           
clog       Specifies the clog global stream.           
cout       Specifies the cout global stream.           
wcerr     Specifies the wcerr global stream.           
wcin      Specifies the wcin global stream.
wclog    Specifies the wclog global stream.
wcout    Specifies the wcout global stream.

这些都是全局的工具,在包括了<iostream> 之后我们就可以直接利用这些工具。至于怎么利用这些工具就不说了。

因为我们在头文件中经常只写 一些声明,而不喜欢在头文件中去引用全局工具,因为这样会涉及到工具的初始化问题,这是个较量巨大的问 题,幸运的是,C++的iostreams的设计者以一套很是完善的要领来办理了这个问题,根基上我们可以在需要的 时候(譬喻在头文件中声明重载<<运算符的函数)在头文件中任意的去include这些库头文件而不会出 现问题。可是其实C++尺度库已经为我们提供了一个更为类型的头文件,向前引用声明(Declare forward references)头文件<iosfwd>。在这个头文件中只有一些声明,并不包括界说,当我们需要在头文件中 向前引用申明的时候,就可以包括这个头文件。查察这个头文件的内容也可以让我们清楚的相识到各类类的原 型,这个头文件中的部门内容如下:

范例声明:

typedef T1 streamoff;
    
typedef T2 streamsize;
    
typedef fpos streampos;

// wchar_t TYPE DEFINITIONS
    
typedef basic_ios<char, char_traits<char> > ios;
    
typedef basic_streambuf<char, char_traits<char> > streambuf;
    
typedef basic_istream<char, char_traits<char> > istream;
    
typedef basic_ostream<char, char_traits<char> > ostream;
    
typedef basic_iostream<char, char_traits<char> > iostream;
    
typedef basic_stringbuf<char, char_traits<char> > stringbuf;
    
typedef basic_istringstream<char, char_traits<char> > istringstream;
    
typedef basic_ostringstream<char, char_traits<char> > ostringstream;
    
typedef basic_stringstream<char, char_traits<char> > stringstream;
    
typedef basic_filebuf<char, char_traits<char> > filebuf;
    
typedef basic_ifstream<char, char_traits<char> > ifstream;
    
typedef basic_ofstream<char, char_traits<char> > ofstream;
    
typedef basic_fstream<char, char_traits<char> > fstream;

// wchar_t TYPE DEFINITIONS
    
typedef basic_ios<wchar_t, char_traits<wchar_t> > wios;
    
typedef basic_streambuf<wchar_t, char_traits<wchar_t> > wstreambuf;
    
typedef basic_istream<wchar_t, char_traits<wchar_t> > wistream;
    
typedef basic_ostream<wchar_t, char_traits<wchar_t> > wostream;
    
typedef basic_iostream<wchar_t, char_traits<wchar_t> > wiostream;
    
typedef basic_stringbuf<wchar_t, char_traits<wchar_t> > wstringbuf;
    
typedef basic_istringstream<wchar_t, char_traits<wchar_t> > wistringstream;
    
typedef basic_ostringstream<wchar_t, char_traits<wchar_t> > wostringstream;
    
typedef basic_stringstream<wchar_t, char_traits<wchar_t> > wstringstream;
    
typedef basic_filebuf<wchar_t, char_traits<wchar_t> > wfilebuf;
    
typedef basic_ifstream<wchar_t, char_traits<wchar_t> > wifstream;
    
typedef basic_ofstream<wchar_t, char_traits<wchar_t> > wofstream;
    
typedef basic_fstream<wchar_t, char_traits<wchar_t> > wfstream;


#p#副标题#e#

模板类的向前 申明:

template<class _Statetype>
    
class fpos;
     
template<class Elem>;
    
class char_traits;
    
     
    
class char_traits<char>;
    
     
    
class char_traits<wchar_t>;
    
     
    
template<class _Ty>
    
class allocator;
    
     
    
class ios_base;
    
     
    
template<class Elem, class Tr = char_traits<Elem> >
    
class basic_ios;
    
     
    
template<class Elem, class Tr = char_traits<Elem> >
    
class istreambuf_iterator;
    
     
    
template<class Elem, class Tr = char_traits<Elem> >
    
class ostreambuf_iterator;
    
     
    
template<class Elem, class Tr = char_traits<Elem> >
    
class basic_streambuf;
    
     
    
template<class Elem, class Tr = char_traits<Elem> >
    
class basic_istream;
    
     
    
template<class Elem, class Tr = char_traits<Elem> >
    
class basic_ostream;
    
     
    
template<class Elem, class Tr = char_traits<Elem> >
    
class basic_iostream;
    
     
    
template<class Elem, class Tr = char_traits<Elem> >
    
class basic_stringbuf;
    
     
    
template<class Elem, class Tr = char_traits<Elem> >
    
class basic_istringstream;
    
     
    
template<class Elem, class Tr = char_traits<Elem> >
    
class basic_ostringstream;
    
     
    
template<class Elem, class Tr = char_traits<Elem> >
    
class basic_stringstream;
    
     
    
template<class Elem, class Tr = char_traits<Elem> >
    
class basic_filebuf;
    
     
    
template<class Elem, class Tr = char_traits<Elem> >
    
class basic_ifstream;
    
     
    
template<class Elem, class Tr = char_traits<Elem> >
    
class basic_ofstream;
    
     
    
template<class Elem, class Tr = char_traits<Elem> >
    
class basic_fstream;

#p#分页标题#e#

这样我们就知道了本来我们一直在利用的这些范例都是一些模板类啊,是的 ,正是利用的C++的模板类这一机制才使得了iostreams能很好的支持wchar_t范例(Unicode),是需要在我们 利用的时候在范例的前面加上一个w就ok了,就像支持宽字符的字符串范例wstring。这样的设计思路是值得我 们进修的,C++中尚有许多雷同的对象,只有用这样雷同的设计要领你才气说你C++还不错了。

我在这 里并差池这里的一些我们没见过的范例做具体的阐明白,因为有些对象我们根基是用不到的,而在这个系列我 也只讲一些较量常用的C++ Iostreams的用法,所以各人也不消太具体的去看上面的对象了。

可以看到 我们常用的范例有:istream, ostream, ifstream, ofstream, istringstream, ostringstream, streambuf. (虽然前面加w的,由于是模板类,所以其用啊都沟通啦)

本系列将从以上这些范例来具体讲授C++ 标 准库中iostreams的用法,本人也是新手,大部门内容会参考MSDN,有什么错的处所可能不完善的处所但愿大 家资助指出。

    关键字:

在线提交作业