C++ 命名空间
来源:互联网 发布:mac电脑的顿号怎么打 编辑:程序博客网 时间:2024/05/24 02:09
C++ 命名空间
命名空间std
C++标准中引入命名空间的概念,是为了解决不同模块或者函数库中相同标识符冲突的问题。有了命名空间的概念,标识符就被限制在特定的范围呢,不会引起命名冲突。最典型的例子就是std命名空间,C++标准库中所有标识符都包含在std命名空间中。
不同模块或者函数库中相同标识符冲突的问题示例:
xh
1 namespace MyNameSpace01{ 2 class MyClass{ 3 public : 4 int f(); 5 private : 6 int m; 7 }; 8 int MyClass::f(){ 9 return 100 ; 10 } 11 }
yh
1 namespace MyNameSpace02{ 2 class MyClass{ 3 public : 4 int f(); 5 private : 6 int m; 7 }; 8 int MyClass::f(){ 9 return 200 ; 10 } 11 }
z.cpp
1 #include<iostream> 2 #include " xh " 3 #include " yh " 4 using namespace std; 5 6 void main(){ 7 // 声明一个文件xh中类MyClass的实例x 8 MyNameSpace01::MyClass x; 9 // 声明一个文件xh中类MyClass的实例x 10 MyNameSpace02::MyClass y; 11 // 调用文件xh中的函数f 12 cout<<xf()<<endl; // 100 13 // 调用文件yh中的函数f 14 cout<<yf()<<endl; // 200 15 }
如果确信在程序中引用某个或者某些程序库不会引起命名冲突,那么可以通过using操作符来简化对程序库中标识符(通常时函数)的使用,例如:using namespace std; 那么就可以不用在标识符在前缀std::来使用C++标准库库中的函数了。
所谓namespace,是标识符的可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。由于namespace的概念,使用C++标准程序库的任何标识符时,可以有三种选择:
1、直接指定标识符。例如std::ostream而不是ostream。完整语句如下:
std::hex是用来进行十六进制流的输出,例如:255的十六进制数是ff。
1 #include<iostream> 2 3 void main(){ 4 std::cout << std::hex << 255 << std::endl; // ff
5 }
2、使用using关键字。
1 #include<iostream> 2 using std::cout; 3 using std::endl; 4 5 void main(){ 6 cout<<std::hex<< 255 << endl; //ff 7 }
3、最方便的就是使用using namespace std;
1 #include<iostream> 2 using namespace std; 3 void main(){ 4 cout<<hex<< 255 <<endl; // ff 5 }
因为标准库非常的庞大,所程序员在选择的类的名称或函数名时就很有可能和标准库中的某个名字相同。所以为了避免这种情况所造成的名字冲突,就把标准库中的一切都被放在名字空间std中。但这又会带来了一个新问题。无数原有的C++代码都依赖于使用了多年的伪标准库中的功能,他们都是在全局空间下的。所以就有了<iostream.h>和<iostream>等等这样的头文件,一个是为了兼容以前的C++代码,一个是为了支持新的标准。命名空间std封装的是标准程序库的名称,标准程序库为了和以前的头文件区别,一般不加”.h”
- C/C++:命名空间
- C++-namespace(命名空间)
- C++-namespace(命名空间)
- C++namespace命名空间
- C#.Net命名空间
- C++_命名空间
- C++namespace命名空间
- 【C++】命名空间
- [C++]namespace命名空间
- C\C++命名空间
- C++:命名空间(namespace)
- [c++]命名空间
- <C++>2.命名空间
- C语言命名空间详解
- C++Primer学习-命名空间
- 《C++Primer》读书笔记--命名空间
- C++std命名空间详解
- 《C++》15 C++ 命名空间
- C#设计模式02:观察者模式Observer Pattern
- Java开发中的23种设计模式详解(转)
- VLC学习(2) VLC架构及流程分析
- Linux命令——2.测及归档
- Idea 使用maven 创建SpringMVC 下载jar 失败
- C++ 命名空间
- NW之模型的快速、平滑定位
- 前端面试题4
- 值得推荐的C/C++框架和库 (真的很强大)
- 最小生成树(普利姆算法、克鲁斯卡尔算法)
- #ASM 翻译系列第十九弹:ASM Internal ASM Continuing Operations Directory
- 浮动小结
- ionic 判断网络连接
- MyBatis 源码分析——生成Statement接口实例