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
原创粉丝点击