c++命名空间

为什么需要命名空间?

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

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

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

using namespace std;

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值