c++命名空间

命名空间的来历

用户编写代码的时候,定义了一个变量a,另外C++库里又提供了一个变量a,这时候C++程序就有两个a,编译并运行该程序的时候,编译器就不知道变量a到底是用户定义的变量a还是C++库提供的变量a。以避免命名冲突名字污染,namespace关键字的出现就是针对这种问题的。

命名空间的定义

在全局范围之内取一块区域并命一个名称,仅此而已

命名空间的分类

(1)有名(有名字)的命名空间

//格式
namespace  标识符的名字
{
    //代码块或语句块
}
//举例
namespace  zhang
{
	int a;
}

(2)无名(没有名字)的命名空间

//声明格式:
namespace     //表示声明的无名的命名空间
{
	//代码块或者语句块
}
//举例
namespace
{
	int a;
}

命名空间的访问格式

符号:域作用符号-----由两个冒号组成------::

(1)有名空间的空间访问

          访问格式1

//格式
命名空间的名称  ::需要访问的内容
//举例
namespace  zhang
{
	int a;
}
zhang ::a;

        访问格式2

        关键字:using

//格式
	using 命名空间名称::需要访问的内容
//举例
namespace  zhang	
{	
	int a;
}
using  zhang::a;//如果后面用到a,那就表明是命名空间里的a

        访问格式3

        关键字:using、namespace

//格式
	using namespace 命名空间的名称;
//举例
namespace  zhang
{
	int a=50;
	int b=60;
}
using namespace zhang;

(2)无名的命名空间的访问

        符号:域作用符号------::

//格式
	::需要访问的内容
//举例
namespace
{
	int a;
}
::a;

命名空间的作用域

它是属于全局的一部分,它实质也是全局的内容,如果变量声明或者是定义在命名空间作用域里,那么它的生命周期也是命名空间里的区域(即在该命名空间里可见,一旦超出命名空间就失效)

//举例
namespace zhang
{
	int a;
}

注意

(1)一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中

(2)命名空间是可以发生嵌套

//格式
namespace 标识符的名称
{

    namespace 标识符的名称
    { 
 
    }
}
//举例
namespace zhangsan
{
	int printf = 1;
	int rand = 2;
	int Add(int a, int b)
	{
		return a + b;
	}
	namespace lisi
	{
		int a = 0; 
		int Sub(int a, int b)
		{
			return a - b;
		}
	}
}

(3)同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中

//格式
namespace 标识符的名称
{
    //代码块或者是语句块1
}
namespace 标识符的名称
{
    //代码块或者是语句块2
}


namespace 标识符的名称
{
    //代码块或者是语句块1
    //代码块或者是语句块2
}


//举例
namespace zhangsan
{
    int a=2
}
namespace zhangsan
{
    int b=3
}


namespace zhangsan
{
    int a=2
    int b=3
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值