博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于“using namespace std”
阅读量:4505 次
发布时间:2019-06-08

本文共 1613 字,大约阅读时间需要 5 分钟。

  对于一个存在着标准输入输出的C++控制台程序,一般会在#include <iostream>的下一行发现一句话,using namespace std。这句话其实就表示了所有的标准库函数都在标准命名空间std中进行了定义。其作用就在于避免发生重命名的问题。
  1. 关于namespace
  C++引入了命名空间namespace主要解决了多个程序员在编写同一个项目中可能出现的函数等重名的现象。解决方法就是加上自己的命名空间。比如下面的例子:
#include 
using namespace std;namespace ZhangSan { int a=10; //张三把10赋值给了变量a}namespace LiSi{ int a=5; //李四把10赋值给了变量a}void main(){ int a=1; cout<<"张三定义的a="<
<
  上例中的“ZhangSan::a”和“LiSi::a”分别表示了调用张三命名空间中的a变量和李四命名空间中的a变量。这样的好处显而易见,那就是虽然张三和李四这两个程序员都定义了一个变量a,但是并不会出现重名的危险。
运行结果为:
2011071013021232.png 
  
  2. 关于using namespace *
  顾名思义,using namespace * 就表示释放命名空间* 中间的东西。好处在于我们在程序里面就不用在每个函数的头上都加上*::来调用。比如说如果上面那个程序,如果我们不在using namespace std,那么我们就需要在主函数中的标准输出流cout函数前面加上std,写成
 
std::cout
表示调用std空间里面的标准输出流cout。但是有些时候我们也不能图这个方便,比如说如果在主函数中将命名空间ZhangSan和LiSi的中所定义的变量释放出来,如下例1:
#include 
using namespace std;namespace ZhangSan { int a=10; //张三把10赋值给了变量a}namespace LiSi{ int a=5; //李四把10赋值给了变量a}void main(){ int a=1; using namespace ZhangSan; using namespace LiSi; cout<
<
这个程序输出结果为:
2011071013303734.png
如果我们在主函数中把 int a=1给删除,如下例2:
#include 
using namespace std;namespace ZhangSan { int a=10; //张三把10赋值给了变量a}namespace LiSi{ int a=5; //李四把10赋值给了变量a}void main(){ using namespace ZhangSan; using namespace LiSi; cout<
<
会发现根本就不会通过编译,输出的错误信息为:
 
error C2872: “a”: 不明确的符号
  分析可以看出,上面这个例2会引起歧义。因为ZhangSan中间的a被释放出来,同理LiSi中间的a也被释放出来了。那么编译器就不知道到底哪个才是需要输出的a,自然就会引起歧义了。同理,在例1中,编译器同样不知道到底哪个才是需要输出的a,于是它只采用了主函数中自己定义的a,这样程序也不会报错,但是只会输出1,自然结果就如上面的图所示了。
 

转载于:https://www.cnblogs.com/uniqueliu/archive/2011/07/10/2102238.html

你可能感兴趣的文章
SVN下如何切换默认用户
查看>>
一个小时搭建一个全栈 Web 应用框架(下)——美化与功能
查看>>
第七周进度条博客
查看>>
20145316《Java程序设计》第9周学习总结
查看>>
2017年6月9日10:12:40 了解自己才能掌控自己 与 深度学习
查看>>
Android 手机的屏幕分辨率大小汇总
查看>>
PhpStorm修改字体
查看>>
经典的一款jQuery soChange幻灯片
查看>>
response.write不要放到try里去,不然会报一个错误 a instance object什么的
查看>>
Charles 连接手机抓包出现Unknown,一直无法抓包的问题解决
查看>>
快速排序(Quick Sort)的C语言实现
查看>>
VIM-->基础操作汇总
查看>>
oracle cursor
查看>>
Response.StatusCode的HTTP状态代码列表
查看>>
win7下maven安装和配置
查看>>
C# 多线程编程 ThreadStart ParameterizedThreadStart
查看>>
Android Camera Parameters 方法出错,求教
查看>>
一个仿照系统UIAlertView写的提示框
查看>>
Genymotion集成到Eclipse
查看>>
代码简洁之四 统一抽象层次
查看>>