C++之“using namespace std”的浅析
来源:互联网 发布:数据库系统全书 编辑:程序博客网 时间:2024/06/08 16:19
对于一个存在着标准输入输出的C++控制台程序,一般会在#include <iostream>的下一行发现一句话,using namespace std。这句话其实就表示了所有的标准库函数都在标准命名空间std中进行了定义。其作用就在于避免发生重命名的问题。
运行结果为:
关于命名空间namespace
C++引入了命名空间namespace主要解决了多个程序员在编写同一个项目中可能出现的函数等重名的现象。解决方法就是加上自己的命名空间。比如下面的例子:
#include <iostream>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<<endl; cout<<"李四定义的a="<<LiSi::a<<endl; cout<<"主函数定义的a="<<a<<endl; }上例中的“ZhangSan::a”和“LiSi::a”分别表示了调用张三命名空间中的a变量和李四命名空间中的a变量。这样的好处显而易见,那就是虽然张三和李四这两个程序员都定义了一个变量a,但是并不会出现重名的危险。
运行结果为:
关于using namespace *
顾名思义,using namespace * 就表示释放命名空间* 中间的东西。好处在于我们在程序里面就不用在每个函数的头上都加上*::来调用。比如说如果上面那个程序,如果我们不在using namespace std,那么我们就需要在主函数中的标准输出流cout函数前面加上std,写成std::cout表示调用std空间里面的标准输出流cout。但是有些时候我们也不能图这个方便,比如说如果在主函数中将命名空间ZhangSan和LiSi的中所定义的变量释放出来,如下例1:
#include <iostream>
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<<a<<endl;
}
这个程序输出结果为:
如果我们在主函数中把 int a=1给注释,如下例2:
#include <iostream>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<<a<<endl;}会发现根本就不会通过编译,输出的错误信息为:
分析可以看出,上面这个例2会引起歧义。因为ZhangSan中间的a被释放出来,同理LiSi中间的a也被释放出来了。那么编译器就不知道到底哪个才是需要输出的a,自然就会引起歧义了。同理,在例1中,编译器同样不知道到底哪个才是需要输出的a,于是它只采用了主函数中自己定义的a,这样程序也不会报错,但是只会输出1,自然结果就如上面的图所示了。
0 0
- C++之“using namespace std”的浅析
- C++之'using namespace std'
- using namespace std 的用法
- using namespace std 的用法
- using namespace std的讲解
- c语言using namespace std什么意思
- VC++6.0之标准using namespace std
- using namespace std;的讲解(转载)
- (转)using namespace std的讲解
- VC++中"using namespace std"的用处
- using namespace std的使用(转载)
- using namespace std的一点用法
- c++中using namespace std的理解
- using namespace std的一些说明
- 关于“using namespace std”的一些文章
- C++中的using namespace std的作用
- 关于using namespace std 的用法
- 关于using namespace std;的浅谈
- python----之jinja2
- java代理机制
- [Leetcode]36. Valid Sudoku
- C++设计模式
- java非数据库自增的主键
- C++之“using namespace std”的浅析
- spring boot 图片上传后的图片读取路径在win与linux环境配置的差别
- js翻书功能
- 点击按钮打开多个窗口
- 《leetCode》:Contains Duplicate III
- Xcode7网络请求报错App Transport Security has blocked a cleartext HTTP
- TOJ 1945.Perfect Cubes
- 三十岁仍一事无成,一个失败工程师的自白
- 【SpringMVC框架】springmvc入门程序-环境搭建