c++命名空间

来源:互联网 发布:农产品追溯软件 编辑:程序博客网 时间:2024/06/02 01:23

为什么需要命名空间?

命名空间是ANSI C引入的可以由用户命名的作用域,用来处理程序中常见的同名冲突

什么是命名空间

所谓命名空间,实际上就是一个由程序设计者命名的内存区域。程序设计者可以根据需要指定一些有名字的空间域,把一些全局实体分别放在各个命名空间中,从而与其他全局实体分隔开来,如

namespace ns1{int a;double b;}

说明:

1.a和b仍是全局变量,仅仅是把他们隐藏在命名空间中而已
2.用的时候要加ns1,比如ns1::a 这种用法叫 命名空间限定
3.声明一个命名空间时花括号内不仅可以包括变量,还可以包括以下类型

  • 变量
  • 常量
  • 函数
  • 结构体
  • 模板
  • 命名空间(可以嵌套)
    4.可以为命名空间起一个别名
    比如
namespace abcdefg{....}namespace ag = abcdefg;

5.存在无名的命名空间

namespace{...}

只在本文件中起作用

下面是例子
head1.h

#ifndef HEAD1_H#define HEAD1_Hnamespace ns1{int a=10;}#endif

head2.h

#ifndef HEAD2_H#define HEAD2_Hnamespace ns2{int a=12;}#endif

main.cpp

#include <iostream>#include "head1.h"#include "head2.h"using namespace std;int main(){    cout<<ns1::a<<endl;    cout<<ns2::a<<endl;    cout << "Hello world!" << endl;    return 0;}

运行结果
这里写图片描述


标准命名空间

标准c++库的所有标识符都是在一个名为std的命名空间中定义的,或者说标准头文件(如iostream)中函数,类,对象和类模板是在命名空间std中定义的。
当用到标准头文件里的函数,类,对象时,可以在前面加上命名空间

std::out<<"hello"<<endl;

但是每个函数都加有些不方便,c++常用using namespace语句对命名空间std进行声明,这样就不必对每个命名空间成员进行处理,在文件的开头加入以下using namespace声明:

using namespace std;

这样,在std重定义和声明的所有标识符在本文件中都可以作为全局变量使用。

原创粉丝点击