欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

c++命名空间

程序员文章站 2022-07-13 17:57:05
...

为什么需要命名空间?

命名空间是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_H

namespace ns1
{
int a=10;
}

#endif

head2.h

#ifndef HEAD2_H
#define HEAD2_H

namespace 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++命名空间


标准命名空间

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

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

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

using namespace std;

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

相关标签: c++命名空间