名字空间(namespace)

意义

对于一个较大型的C++程序来说,需要由多个程序员相互协作编写,这样的情况下容易出现不同程序员在需要负责的程序部分使用相同名字的变量或函数,导致程序合并后出现问题。名字空间的作用,就是将不同程序员编译的程序放入相应的名字空间,每个名字空间相对独立,空间内的变量和函数名只局限于当前空间下,从而解决命名冲突的问题。

格式

 namespace 空间名 {程序块} 

使用

1. 自定义名字空间

/*zhang.h*/                                       //原编译文件
#ifndef ZHANGH
#define ZHANGH
namespace Zhang{
    void f();
    class T{
           void ZhangFunc();
    };
}
#endif
/*zhang.cpp*/                                  //使用名字空间中的变量和函数
void Zhang::f(){}                              //使用Zhang中的f()
void Zhang::g(){}                             
void Zhang::T::ZhangFunc()           //使用Zhang中的类T中的ZhangFunc()
{
} ```

include <iostream>

using namespace std;
namespace my{
int abc = 100;
class T{
...
};
}
namespace my{
void myFunc(){
cout<<"Show string!"<<endl;
}
} //实际上上面两个my名字空间为同一个my,分开写减少代码长度
int main(){
my::myFunc();
cout<<my::abc<<endl; //调用的是同一个my
return 0;
}```

2. 匿名名字空间

不命名,即namespace后不加空间名,此时在文件中只可通过特殊的地址传递方式访问其中的内容,每次编译C++自动赋予其名字,故实际上只能编译该空间一次,其具体作用后续再介绍。

3. 全局名字空间

在主文件中用到的名字空间,作用域为整个当前cpp文件,格式为

 using namespace 空间名 

典型案列

using namespace std

std 即为包含输入输出流的全局名字空间(任何空间都可作为全局名字空间使用)
使用std名字空间的程序例子如下

#include<iostream>
using namespace std;
int abc = 100;
void myFunc(){
      cout<<"Show string!"<<endl;
}
int main(){
    ::myFunc(); myFunc();                      //两句意思相同
    ::cout<<::abc<<abc<<endl;               //::cout,::abc即是cout,abc
    return 0;
}```
使用其他名字空间的例子如下

include <iostream>

using namespace std;
namspace first
{
int x = 5;
}
namspace second
{
double x =3.1416;
}
int main(){
{ //编译时不同的名字空间为限定其作用范围应该加入大括号
using namespace first;
cout<<x<<endl;
}
{
using namespace second;
cout <<x<<endl;
}
//如果不加入大括号则实际代码如下
using first::x;
cout<<x<<endl;
using second::x; //此处x与之前的x冲突,编译器无法识别,报错
cout<<x<<endl;
//
return 0;
}```

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、 为什么需要命名空间(问题提出) 命名空间是ANSIC++引入的可以由用户命名的作用域,用来处理程序中 常见的...
    IvanRunning阅读 2,393评论 0 2
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,992评论 19 139
  • 一、温故而知新 1. 内存不够怎么办 内存简单分配策略的问题地址空间不隔离内存使用效率低程序运行的地址不确定 关于...
    SeanCST阅读 7,884评论 0 27
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,558评论 25 708
  • 终于失恋了,已经是大龄青年的我却不得不承认这个事实,在那个女子轻松而又沉重地对我说出分手这句话之后,我感到...
    小说热爱者阅读 312评论 0 1