C++入门——命名空间

前言

在c/c++中,会有变量、函数以及后面的类,这些名称都要存在于局部的,可能会有冲突。
所以使用命名空间的意义就是,对标识符的名称进行本地化,以避免命名冲突或者名字的污染。
namespace关键字 就是针对这种问题的。在这里插入图片描述
像这里,在stdlib头文件里已经有了rand这个函数,但是又定义了一个变量,名字与他一样,当程序打印rand时候,不知道是哪个,产生了歧义。
所以为了避免这样,就会有命名空间。

命名空间的定义

定义命名空间需要用到namespace关键字,后面接命名空间的名字,然后{}写体内,里面的就是命名空间的成员
在这里插入图片描述
定义一个命名空间叫做 hello
命名空间里面包含着变量rand
当主函数执行第一个printf语句时,先在局部里面找,没找到就去全局里面找,当然前面的头文件在编译的时候就已经全部展开了,相当于全局,然后rand函数在全局,rand是函数名,那么以%d打印就是函数的地址。
第二个printf语句就是直接去访问hello 的命名空间里面的rand。
这里的 namespace hello 就是一堵墙一样,把自己定义的函数,变量等包围起来,避免与全局的某个名称相同有歧义,当需要去用自己定义的函数,变量,就去用作用域限定符去访问命名空间。

定义的方式:
1.正常定义命名空间

namespace hello
{
	int rand = 10;
	int Add(int x, int y)
	{
		return x + y;
	}
}

2.命名空间可以嵌套

namespace N1
{
	int rand = 10;
	int Add(int x, int y)
	{
		return x + y;
	}
	namespace N2
	{
		int a = 1;
		int Sub(int x, int y)
		{
			return x - y;
		}
	}
}

在访问的N2时,比如:访问a变量。
N1::N2::a
3.同一个工程里,允许存在多个相同名称的命名空间,编译器会合并成为一个命名空间

同一个域里面不能有同一个名字的声明,会冲突。

命名空间的使用

命名空间里面可以定义变量、函数、类型

namespace N1
{
	int rand = 10;
	int Add(int x, int y)
	{
		return x + y;
	}
	struct Node
	{
		int val;
		struct Node* next;
	};
}

命名空间的使用方式:
1.加命名空间名称以及作用域限定符

在这里插入图片描述
2.使用using将命名空间中某个成员引入(指定展开)

#include <iostream>
using  std::cout;
int main()
{
	cout << "hello";
	return 0;
}

在c++里,std是它标准库的命名空间,c++将标准库的定义实现都放在了这个命名空间里。

所以cout 也在std里面,但是为了每次用cout都要去 std::cout ,就用using std::cout ,把cout专门展开了。
但就算专门展开了,也可以用 std::cout ;
在这里插入图片描述
这个是简单的把命名空间的a开放了
3.使用using namespace 命名空间名称 引入(全部展开)

#include <iostream>
using  namespace std;
int main()
{
	cout << "hello";
	return 0;
}

这里就是将整个std展开了

在这里插入图片描述
这里就是将整个命名空间hello展开了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值