20141204-关于使用C++标准输入输出库:iostream的一点思考
来源:互联网 发布:goldwave mac版 编辑:程序博客网 时间:2024/06/03 19:56
转载请注明出处~
iostream(In and Out stream)是C++语言中标准库(standard library)中提供IO机制的函数库,包含两个基础类型istream和ostream,分别表示输入流和输出流。一个“流”指的就是一个字符序列,表示从IO设备读出或写入IO的。“流”(stream)即:随着时间的推移,字符是顺序产生或消耗掉的;
标准输入输出库中定义了四种对象:
isteam: cin;
ostream: cout, cerr, clog;
ceer用于输出警告或错误信息,clog用于输出程序运行时的日志信息;
如何使用?
一般我们的使用方法是头文件包含+命名空间使用,即:
#include <iostream>
using namespace std;
也有直接使用头文件包含,即:
#include <iostream.h>
看似只有很小差距的两种方法(貌似第二种方法更好啊,少写了一行代码呢!)。不过今天看到了下面这三段代码后,才隐约地感觉有些不一样,搜索之后才发现,这小小的一个标准库的使用居然也有如此的差别!
code section 1:
#include <iostream>
int main() {
std::cout << "Input One number:" << std::endl;
int num1 = 0:
std::cin >> num1;
std::cout << "The number is:" << num1 << std::endl;
return 0;
}
code section 2:
#include <iostream>
using std::cin;
using std::cou;
using std::endl;
int main() {
cout << "Input One number:" << endl;
int num1 = 0:
cin >> num1;
cout << "The number is:" << num1 << endl;
return 0;
}
code section 3:
#include <iostream.h>
int main() {
cout << "Input One number:" << endl;
int num1 = 0:
cin >> num1;
cout << "The number is:" << num1 << endl;
return 0;
}
思考
这代码1和代码2明显就是告诉了我:你用什么就是“using什么”啊!,这也就是说以前那种【using namespace std;】简直就是简单粗暴型的全部引用,小程序中没有什么问题,但是如果在大的项目中,无疑是给自己埋了一个坑啊!为甚么?因为你已经把那些你潜在会自己命名的变量名给引进来了!到时候是怎么使用呢?一个不小心你就会被标准库给搞了!
这里说明下:cout、cin、ceer、clog、endl这些其实就是变量,是在iostream库中istream 和 ostream两个类中的对象;假设你不知道有cout这个变量的存在,你自己定义了一个cout,而你又是用了上面【using namespace std;】的方式把全部的标准输入输出库的所有都使用了,那么在程序运行时是用你的“cout”还是用std的“cout”呢?当然,cout每个人都不会用错,但是其他的呢?比如hex、dec、oct。
而如果采用代码2中的方法就会很好了,用什么就“using什么”,不多余的使用,这样简单明了、清晰,完全不用担心我多用了什么;
接下来是代码3和代码2及使用【using namespace std;】的方法之间有什么差别呢?不要以为只是多了一个“.h”而已哦,这里面有很多差别。后缀为.h的头文件c++标准已经明确提出不支持了,早些的实现将标准库功能定义在全局空间里,声明在带.h后缀的头文件里,c++标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀.h。因此,当使用<iostream.h>时,相当于在c中调用库函数,使用的是全局命名空间,也就是早期的c++实现;当使用<iostream>的时候,该头文件没有定义全局命名空间,必须使用namespace std;这样才能正确使用cout。
经过这么一来,才发现一个小小的引用iostream居然有这么多的“坑”。不过以后就不再是了,这样一来算是对iostream有了个好的了解了。
记于2014年12月04日。
0 0
- 20141204-关于使用C++标准输入输出库:iostream的一点思考
- C++:输入输出iostream
- 【C++】关于日历编程的一点思考
- 关于c加加的一点思考
- 关于ANSI C标准的一点收获
- C++的iostream标准库介绍和使用详解
- C++的iostream标准库介绍+使用详解
- C++的iostream标准库介绍+使用详解(转)
- C++的iostream标准库介绍+使用详解(转)
- C++的iostream标准库介绍+使用详解(转)
- C++的iostream标准库介绍+使用详解
- 关于 && 的一点思考
- [C++STDlib基础]关于C标准输入输出的操作——C++标准库头文件<cstdio>
- 关于标准输入输出的缓存
- 关于标准输入输出流及转换流的使用
- 大话C、C++之 关于void的一点哲学思考
- 关于C语言结构体偏移的一点思考
- 关于C语言和汇编语言混合编程的一点思考
- NGUI UIPanel的Depth属性
- 成为程序员前需要做的10件事
- SNMP学习笔记——SNMP基础定义
- spfa算法
- 清空链表跟销毁链表的区别
- 20141204-关于使用C++标准输入输出库:iostream的一点思考
- 后缀表达式
- java设计模式
- Android事件分发机制完全解析,带你从源码的角度彻底理解(下)
- 俯瞰 cocos2d-x 02 创建精灵
- 日期控件增加背景颜色
- 体验C#——冒泡算法的C#实现
- linux实用grep命令
- Scons 简介--跨平台脚本