IOStream系统学习笔记 IOStream基本概念
2008-01-24 07:47
519 查看
一 IOStream的基本概念
1 stream对象
stream就是一条数据流,是由某个类别定义出来的具有特定类型的对象,输出操作被定义为“数据流入stream”,输入操作被称为“数据流出stream”,另外有些标准的I/O通道(Channels)被定义为标准的全局对象,比如basic_istream<>的实例cin,basic_ostream<>的实例cout。
2 stream类别
stream主要分为用于输入的stream和用于输出的stream,比如istream和ostream。
3 全局性的stream对象
毕竟C++兼容着C语言,不是纯OO,存在全局函数及全局变量的概念,但这不一定是坏事(那些唯OO的技术洁癖可以当作没看到),比如下面这些标准I/O通道所用到的全局对象。
1) cin(隶属于istream):是供使用者输入用的标准输入通道,对应于C的stdin。操作系统通常将他和键盘连接。
2) cout(隶属于ostream):是供使用者输出用的标准输出通道,对应于C的stdout。操作系统通常把他与显示器相连接。
3) cerr(隶属于ostream):是所有错误信息输出使用的标准输出通道,相对于C的stderr。操作系统通常也是把它和显示器相连接,缺省情况没有缓冲,因为错误要及时通知给用户。
4) clog(隶属于ostream):是标准日志通道,缺省状况下操作系统把它连接于cerr所连接的装置,但是clog是有缓冲区的。避免大量的log输出造成频繁I/O。
如果操作系统支持标准I/O通道的重定向功能,则可以修改默认输出设备,比如将cin的默认输入设备改为一个文件,或一个由socket维护的stream。
4 让大家疑惑的移位运算符>> <<
初学C++的cin对象和cout对象时可能会对移位运算符<< >>产生疑问,其实移位运算符是在cin,cout所属类别中被执行了运算符重载,使其功能是像默认输出设备写数据和从默认输入设备读数据。
5 操控器 (manipulators)
经常用到std::endl我以前一直以为它不过是一个宏定义或常量,表示不同操作系统平台的\n,刚刚发现第二个功能,它还在里面调用了一下flush()函数,刷新了缓冲区,也就是说你每次输出一个endl的时候,就会把缓冲区数据输出到磁盘中。
刚刚又发现vs里面的代码提示中,endl是一个函数,但是我们实际调用的时候都是直接用endl而不是endl()来调用的,我初步判断它可能同时重载了()的类,虚伪的函数。。
其他操控器还有一些如:
endl: 输出\n并刷新缓冲区
ends:输出\0
flush:刷新output缓冲区
ws:读入并忽略空格
最后是一个小例子
// learnio.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
1 stream对象
stream就是一条数据流,是由某个类别定义出来的具有特定类型的对象,输出操作被定义为“数据流入stream”,输入操作被称为“数据流出stream”,另外有些标准的I/O通道(Channels)被定义为标准的全局对象,比如basic_istream<>的实例cin,basic_ostream<>的实例cout。
2 stream类别
stream主要分为用于输入的stream和用于输出的stream,比如istream和ostream。
3 全局性的stream对象
毕竟C++兼容着C语言,不是纯OO,存在全局函数及全局变量的概念,但这不一定是坏事(那些唯OO的技术洁癖可以当作没看到),比如下面这些标准I/O通道所用到的全局对象。
1) cin(隶属于istream):是供使用者输入用的标准输入通道,对应于C的stdin。操作系统通常将他和键盘连接。
2) cout(隶属于ostream):是供使用者输出用的标准输出通道,对应于C的stdout。操作系统通常把他与显示器相连接。
3) cerr(隶属于ostream):是所有错误信息输出使用的标准输出通道,相对于C的stderr。操作系统通常也是把它和显示器相连接,缺省情况没有缓冲,因为错误要及时通知给用户。
4) clog(隶属于ostream):是标准日志通道,缺省状况下操作系统把它连接于cerr所连接的装置,但是clog是有缓冲区的。避免大量的log输出造成频繁I/O。
如果操作系统支持标准I/O通道的重定向功能,则可以修改默认输出设备,比如将cin的默认输入设备改为一个文件,或一个由socket维护的stream。
4 让大家疑惑的移位运算符>> <<
初学C++的cin对象和cout对象时可能会对移位运算符<< >>产生疑问,其实移位运算符是在cin,cout所属类别中被执行了运算符重载,使其功能是像默认输出设备写数据和从默认输入设备读数据。
5 操控器 (manipulators)
经常用到std::endl我以前一直以为它不过是一个宏定义或常量,表示不同操作系统平台的\n,刚刚发现第二个功能,它还在里面调用了一下flush()函数,刷新了缓冲区,也就是说你每次输出一个endl的时候,就会把缓冲区数据输出到磁盘中。
刚刚又发现vs里面的代码提示中,endl是一个函数,但是我们实际调用的时候都是直接用endl而不是endl()来调用的,我初步判断它可能同时重载了()的类,虚伪的函数。。
其他操控器还有一些如:
endl: 输出\n并刷新缓冲区
ends:输出\0
flush:刷新output缓冲区
ws:读入并忽略空格
最后是一个小例子
// learnio.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
相关文章推荐
- [文件系统]文件系统学习笔记(一)---基本概念以及inode
- Linux学习笔记之基本概念文件系统分区和挂载
- Linux系统编程之基本概念--学习笔记
- [文件系统]文件系统学习笔记(一)---基本概念以及inode
- JavaScript高级程序设计学习笔记--基本概念
- Oracle RAC学习笔记:基本概念及入门
- java学习笔记(7)基本概念之IO
- IOS学习笔记(九)之UIAlertView(警告视图)和UIActionSheet(操作表视图)基本概念和使用方法
- 嵌入式开发之C基础学习笔记03--基本数据类型,操作符,修饰符等基本概念
- IOS学习笔记(十)之UIImageView图片视图的基本概念和使用方法
- js 学习笔记---基本概念
- 分布计算环境学习笔记1——基本概念和发展历史
- Verilog学习笔记基本语法篇(十)········ 常用系统函数
- MPEG4 & H.264学习笔记之二 ------ 视频编码基本概念及时域模型
- 数据库系统概论学习02-基本概念
- TCP/IP 详解卷一学习笔记(一):TCP/IP 协议基本概念
- 密码学基本概念与信息理论基础学习笔记
- JavaScript学习笔记1:JavaScript学前介绍与基本概念
- Python基本概念--Python学习笔记
- CUDA学习笔记——一些基本概念