C++namespace命名空间学习理解

本文介绍了C++中namespace的作用,用于解决命名冲突,讲解了局部域、全局域和命名空间域的区别,以及如何处理不同域之间的命名冲突和使用usingnamespacestd的注意事项。
摘要由CSDN通过智能技术生成

C++namespace命名空间理解


前言

初学C++,第一个关键字namespace理解

为了解决程序员与标准库命名冲突问题,C++使用了namespace关键字


一、namespace是什么?

项目开发,项目分解很多小组,小组分解很多组员,每个程序员都会有自己的代码风格。个人代码写到自己的代码空间里面,不会与其他人的代码命名冲突。

二、举例说明

1.namespace理解

程序分为4个域
1.局部域
2.全局域
3.命名空间域
4.类域
下面先理解,局部域和全局域

#include <iostream>

int cout = 1;
int main()
{
	int cout = 2;
	printf("%d \n", cout);
	printf("%d \n", ::cout);
	return 0;
}

不指定域:代码搜索原则 局部域 全局域(找不到报错)
指定域 :直接到指定域搜索
上面打印结果是,2 和1
因为编译器先搜索局部域,后全局域。
::是域作用限定符
如果只有::(左边空着),就是指定的全局域,是除了局部域、命名空间域、类域以为的域。

2.namespace命名std理解

程序分为4个域
1.局部域
2.全局域
3.命名空间域
4.类域

#include <iostream>

int main()
{
	std:: cout << "hello world" <<std:: endl;
	return 0;
}

先理解iostream 头文件,里面使用了宏,定义了namespace std,里面声明了像cout 、cin等关键字。如果使用,程序中要使用std::前缀(不加会报错)。
不指定域:代码搜索原则 局部域 全局域(找不到报错)
指定域 :直接到指定域搜索

#include <iostream>

using namespace std;
int main()
{
	std:: cout << "hello world" <<std:: endl;
	cout << "hello world" << endl;
	return 0;
}

如果使用using namespace std;相当于把std域给打开权限了,编译器会搜索局部域和全局域和命名空间域。也可以指定std::


3.命名空间域和全局域名字冲突怎么办?

#include <iostream>
//#include "test.h"

using namespace std;
namespace bit1
{
	int cout = 1;
}
int cout = 0;
int main()
{
	printf("%d \n", ::cout);
	printf("%d \n", bit1::cout);
	std:: cout << "hello world" <<std:: endl;
	//cout << "hello world" << endl;
	return 0;
}

全局域和命名空间域重命名时,使用时必须指定哪一个域。如果不指定(用屏蔽那一行),会报错,编译器不知道用哪一个。全局域用::
可以理解,命名空间域虽然打开,但是和全局域是相互独立的。全局域和bit1域、std域是一样的,只不过全局域没有命名而已,所以使用时一样要知道用的哪一个域的参数

#include <iostream>
//#include "test.h"

using namespace std;
namespace bit1
{
	int cout = 1;
}
int cout = 0;
int main()
{
	int cout = 2;
	printf("%d \n", cout);
	printf("%d \n", ::cout);
	printf("%d \n", bit1::cout);
	std:: cout << "hello world" <<std:: endl;
	//cout << "hello world" << endl;
	return 0;
}

命名空间域、局部域、全局域可以重命名。但是全局域和命名空间域必须知道指定哪一个域,否则会报错。


总结

全局域、命名空间域、类域是相互独立的,如果都存在一个工程里面,确认使用的域名,最好不要打开域名(using namespace std;)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值