栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++之命名空间(namespace)的强大作用

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++之命名空间(namespace)的强大作用

前言:什么情况下会产生命名冲突的问题呢?分以下两种情况:

1.我们自己定义的变量名,函数名可能与库里面的名字冲突

2.在大型项目中,多人协作的时候,可能会出现使用相同命名的情况,造成冲突。

然而C语言并没有办法可以很好地解决这样一个问题,C++提出了一种新语法,即命名空间来解决命名冲突的问题。

命名空间定义:定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。注意:命名空间是一个域!

//1. 普通的命名空间
namespace Bernard1 // Bernard1为命名空间的名称
{
	// 命名空间中的内容,既可以定义变量,也可以定义函数
	int rand = 0;
	int Add(int left, int right)
	{
		return left + right;
	}
}
//2. 命名空间可以嵌套
namespace Bernard2
{
	int a;
	int b;
	int Add(int left, int right)
	{
		return left + right;
	}
	namespace Bernard3
	{
		int c;
		int d;
		int Sub(int left, int right)
		{
			return left - right;
		}
	}
}
//3. 同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。
namespace Bernard4
{
	int Mul(int left, int right)
	{
		return left * right;
	}
}

注意区分函数域和命名空间域:

namespace Bernard1
{
	//他们还是全局变量,放到静态区的
	int rand = 0;
	int a = 0;
}
void f()
{
	//局部域
}

命名空间使用:

命名空间的使用有三种方式:

1.加命名空间名称及作用域限定符

指定作用域,起到了最好的隔离效果

namespace Bernard2
{
	int a;
	int b;
	int Add(int left, int right)
	{
		return left + right;
	}
	namespace Bernard3
	{
		int c;
		int d;
		int Sub(int left, int right)
		{
			return left - right;
		}
	}
}
int main()
{
	printf("%dn", Bernard2::a);
	Bernard2::Bernard3::Sub(3, 4);
	return 0;
}

2.使用using将命名空间中部分成员引入

把命名空间中常用的展开

namespace Bernard
{
	int a = 10;
	int b = 20;
	int Add(int left, int right)
	{
		return left + right;
	}
	struct Node
	{
		struct Node* next;
		int val;
	};
}
using Bernard::Node;
using Bernard::b;
int main()
{
	printf("%dn", Bernard::a);
	printf("%dn", b);
	struct Node node1;
	struct Bernard::Node node2;//注意结构体指定的位置
	Bernard::Add(1, 2);
	return 0;
}

3.使用using namespace 命名空间名称引入

把整个命名空间展开--失去了隔离的作用

namespace Bernard
{
	int a = 10;
	int b = 20;
	int Add(int left, int right)
	{
		return left + right;
	}
	int Sub(int left, int right)
	{
		return left - right;
	}
}
using namespace Bernard;
int main()
{
	printf("%dn", b);
	Add(10, 20);
	return 0;
}

总结:C++采用命名空间主要是为了防止重命名的情况出现,很好地起到了与外界隔离的效果,将其封装了起来。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1010372.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号