百科问答小站 logo
百科问答小站 font logo



C++,为什么有了include<iostream>,还需要using namespace std呢? 第1页

  

user avatar   pansz 网友的相关建议: 
      

一个比较简单的答案:因为 C++ STL 标准库比 C++ 语言诞生得更晚

C++编程语言在 1985 年诞生。而STL标准库的草案在 1992 年才成型。两者相隔了整整七年的时间。

C++ 标准库引入了大量的新的名称。如果这些名称是在 C++ 这门语言诞生之时就存在,那么,C++ 代码撰写者就基本不会使用这些名称来定义自己的标识符。

然而,七年间,全世界的程序员们围绕 C++ 语言开发了大量的代码,这些代码有很大数量已经用到了将来 STL 库使用的标识符。

那么,在这之后推出 STL 标准库,就会遇到很多重名方面的问题。所以最后就统一把所有 STL 库的内容用 std 这个 namespace 包起来。


有的同学可能会提出质疑,iostream 是在 STL 之前就诞生了,为什么 iostream 也要放进 std ?

事实上,在当初还没有标准库的时候,iostream 库真就是直接用的。不需要加 std 。那时候的标准用法还是 #include <iostream.h> 如果你这样用,那就确实不需要加 std 。

后来有了 STL 之后,为了统一起见,就把 iostream 库也放进了 std,写法也去掉了后缀成为 #include <iostream>。

但如果你还需要兼容旧有代码,如果你的代码是在还没有发明 std namepsace 之前撰写的,那可以使用 #include <iostream.h> 这种带后缀的形式,这种形式是不需要加 std 的。




  

相关话题

  Unix网络编程里的阻塞是在操作系统的内核态创建一个线程来死循环吗? 
  有哪些轻量级适合阅读的优秀 C++ 开源项目? 
  为什么C++里,封装类对象消亡时候,先执行封装类的析构函数,再执行成员对象的析构函数? 
  快奔四的人了,开始学C++,是否太迟了? 
  倒序输出字符串c++为啥不行? 
  有哪些值得学习的国内 c++ 开源项目? 
  如何开始用 C++ 写一个光栅化渲染器? 
  C#中有什么是与C++的setw()、setfill对应的呢? 
  异常处理(exception handling)和错误处理(error handling)有什么区别? 
  如何评价博客园关于 C++ 的这篇热门文章? 

前一个讨论
现在回想起来,“没有废物的武魂,只有废物的魂师”这句话,真的是对的吗?
下一个讨论
如何评价 12 月 27 号 7999 元预售的联想拯救者 R9000P?





© 2024-11-09 - tinynew.org. All Rights Reserved.
© 2024-11-09 - tinynew.org. 保留所有权利