【C++】【3】命名空间 namespace

 

目录

1 namespace概念:

2 namespace使用

2.1 加命名空间以及作用域限定符

2.2 使用using将命名空间内的成员引入

2.3 使用using namespace将命名空间引入


学了这么久了,一直搞不明白写C++程序的时候为什么要使用using namespace std;这篇文章带你深度理解一下命名空间,走起!

C++感觉C语言太捞了,凭什么变量名是唯一的,全世界每个人的名字也不是唯一的,于是C++提出了命名空间的概念,在我这个命名空间下这个变量名是这个意思,在其他命名空间下是另外的意思,那到底是啥意思?一起来看一下!

#include <stdio.h>
int main()
{
	int printf = 10;
	printf("123");
	return 0;
}

上面的代码报错了,凭啥给我报错呢?原因是我使用了c语言库中的printf函数,而且我还定义了一个printf的变量,编译器一下子傻眼了,我是调用变量还是函数啊,所以报了这个错误。有的人说名字冲突了你换一个不就好了么,假如给你10万就让你取这个名字,有办法吗?有,没有钱做不到的事。

1 namespace概念:

  • 定义命名空间需要用到namespace关键字后面跟着命名空间的名字,然后接一对{},{}中为该命名空间的成员
namespace my {
	int printf;
}
  • 命名空间可以嵌套
namespace my {
	int printf;
	namespace our
	{
		int scanf;
	}
}
  • 同一个工程允许存在相同名字的命名空间,编译器最后会整合到一起
  • 一个命名空间就定义了一个新的作用域,命名空间中的所有成员都限制在这个作用域中
#include <stdio.h>
#include <iostream>
namespace my {
	int printf;
	namespace our
	{
		int scanf;
	}
	void get(int a)
	{
		std::cout << a << std::endl;
	}
}

int main()
{
	my::printf = 10;
	my::get(10);

	return 0;
}

2 namespace使用

2.1 加命名空间以及作用域限定符

命名空间::来访问命名空间内的成员,像下面使用的std::以及my::都是

namespace my {
	int printf;
	namespace our
	{
		int scanf;
	}
}

int main()
{
	my::printf = 10;
	std::cout << my::printf << std::endl;
	return 0;
}

2.2 使用using将命名空间内的成员引入

using std::cout;
using std::endl;
int main()
{
	cout << "使用using将命名空间的成员引入" << endl;
	return 0;
}

我们发现这样不用在cout前面加std::限定了,但是用的太多了我们要一个一个的using

2.3 使用using namespace将命名空间引入

using namespace std;
int main()
{
	cout << "使用using将命名空间的成员引入" << endl;
	return 0;
}

这样是不是用起来更爽,消费一次就可以长久使用,但是实际在写工程的时候大家的名字往往起什么都有可能,所以在使用命名空间的时候不建议将公有的命名空间展开,建议使用std::这样的访问方式更加的专业

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值