头文件
头文件要在 C++ 中执行任何输入和输出操作,我们需要使用 iostream 头文件。如果没有
头文件,就无法从用户那里获取输入或打印任何输出。
引入
表现为如同定义了一个 std::ios_base::Init
类型的静态存储期对象一样:若它是首个被构造的 std::ios_base::Init
对象,则其构造函数初始化各个标准流对象,而若它是最后被销毁的 std::ios_base::Init
对象,则其析构函数将会冲洗这些对象(除了 cin 和 wcin)。
库被认为是 C++ 中最基础和最重要的一个头文件,它定义了输入和输出的流类和函数,可以实现程序与控制台或文件之间的交互操作。掌握
库的知识对于使用 C++ 进行输入输出操作至关重要。
#include
#include
#include
#include
namespace std {
extern istream cin;
extern ostream cout;
extern ostream cerr;
extern ostream clog;
extern wistream wcin;
extern wostream wcout;
extern wostream wcerr;
extern wostream wclog;
}
很多学 C++ 的都知道,C++ 中有一个
。这是 C++ 早期版本所使用的,而现在版本已经不支持。现在版本用的是 iostream。在 C++ 的早期版本面世后,业界内普遍反映
速度慢,C++ 也在不断地改进,而到某一版本,新写出了一种输入输出流,此输入输出流速度较快,被业界普遍接受。C++ 标准为了凸显 C++ 与 C 的不同,以及 C++ 对以往的进步,还有对 C++ 早期语言的兼容,将此输入输出流命名为 iostream,而同时也保留了
,这两个文件可以在 Viual Studio 编辑器中的外部依赖项看到。它们的代码是不尽相同的。
库的基础是两种命名为 istream 和 ostream 的类型,分别表示输入流和输出流。流是指要从某种 IO 设备上读出或写入的字符序列。术语“流”试图说明字符是随着时间顺序生成或消耗的。
标准库定义了 4 4 4 个 IO 对象。处理输入时使用命名为 cin
(读作 see-in)的 istream 类型对象。这个对象也称为标准输入。处理输出时使用命名为 cout
(读作 see-out)的 ostream 类型对象,这个对象也称为标准输出。标准库还定义了另外两个 ostream 对象,分别命名为 cerr
和 clog(分别读作“see-err”和“see-log”)。cerr
对象又叫作标准错误,通常用来输出警告和错误信息给程序的使用者。而 clog
对象用于产生程序执行的一般信息。
库的基础是类模板的层级结构。类模板以一种与类型无关的方式,提供了这个库的大部分功能。
基本类模板是一个类模板的集合,其中每个类模板有两个参数:字符类型(charT)参数决定处理的元素类型,而特性参数 对每个特定的元素类型提供一些额外的特征。
这个类层级结构中的类模板和它们的字符类型的实例相比,名字前面多了前缀 basic_。
例如,istream 由之实例化而来的类模板名为 basic_istream,fstream 由之实例化而来的类模板名为 basic_fstream,等等。唯一的例外是ios_base,因为它本身就是类型无关的,所以它并不基于任何类模板,而是一个正规类。
库中集成了两组标准的整个 iostream 类模板层级结构的实例:一组是面向单字节的,处理 char 类型的元素;另一组是面向宽字节的,处理 wchar_t 类型的元素。
面向单字节(char 型)的实例可能是
库更为人所知的一部分。 ios、istream 和 ofstream 等类都是面向单字节的。图1是面向单字节的所有类的名称和关系。面向宽字节(wchar_t 型)的实例的命名规则与面向单字节的实例相同,但所有类和对象名称前有前缀 w w w,例如 wios、wistream 和 wofstream。
作为
库的一部分,头文件声明了一些用来在标准输入输出设备上进行输入输出操作的对象。
这些对象分为两组:面向单字节的,即常见的 cin、cout、cerr 和 clog;
其面向宽字节的对应物,声明为 wcin、wcout、wcerr 和 wclog。
库中的类很少对其成员的原型使用基本类型,而是通常使用根据其实例的特性定义的类型。对默认的 char 和 wchar_t 型的实例,类型 streampos、streamoff 和 streamsize 分别用以表示位置、偏移和大小。
操纵符是用来与对流对象进行操作的插入(<<
)和提取(>>
)运算符一同使用的全局函数。它们通常变更流的属性和格式设置。endl、hex 和 scientific 是一些操纵符的例子。
头文件的语法#include
#include "iostream.h"\n
头文件中有两种类型的流:
使用输入流的语法:std::cin>> variable_name
执行 cin 时,光标将停止在特定语句处,直到输入值。输入的值将存储在变量中。
cout 的语法:std::cout<
执行 cout 时,将打印变量中的值。
// iostream standard header
#if _MSC_VER > 1000
#pragma once
#endif
#ifndef _IOSTREAM_
#define _IOSTREAM_
#include
#ifdef _MSC_VER
#pragma pack(push,8)
#endif /* _MSC_VER */
_STD_BEGIN
// OBJECTS
static ios_base::
Init _Ios_init;
extern _CRTIMP istream cin;
extern _CRTIMP ostream cout;
extern _CRTIMP ostream cerr, clog;
// CLASS _Winit
class _CRTIMP _Winit {
public:
_Winit();
~_Winit();
private:
static int _Init_cnt;
};
// WIDE OBJECTS
static _Winit _Wios_init;
extern _CRTIMP wistream wcin;
extern _CRTIMP wostream wcout, wcerr, wclog;
_STD_END
#ifdef _MSC_VER
#pragma pack(pop)
#endif /* _MSC_VER */
#endif /* _IOSTREAM_ */
/*
* Copyright (c) 1994 by P.J. Plauger. ALL RIGHTS RESERVED.
* Consult your license regarding permissions and restrictions.
*/