C++命名空间通俗的解释

本文详细解释了C++中使用命名空间std的意义,如何使用using关键字引入命名空间,并讨论了命名空间存在的目的以及作用域问题。文章深入探讨了命名空间如何帮助解决全局域的名字污染问题,同时提供了关于未命名命名空间的定义和局部作用域的使用指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通俗的解释:

using namespace std 这句的意思是 使用命名空间 std 

比如 杭州有一个西湖 潮州也有个西湖 
如果你只说 西湖 ,可能别人就不知道你是说那里的西湖 
如果你说 杭州的西湖, 别人就知道你是说杭州的西湖 

这里的杭州就好像是使用 using namespace std 。

如果是用某个 namespace 中的成员,那么就要用指定 namespace。


可以有两种方式:

(1) 直接 using namespace xxx;

这样用到的时候就会从这个 namespace 查找

(2) 在用到的时候在前面指定 xxx::

命名空间 顾名思义是为了解决命名冲突的

在C++中我们经常要包含一些头文件,来获得它们包含的函数的支持。但头文件中除了我们要用的函数外,还有像经常用的cin,cout,endl等东西,它们实际上是全局对象,在编译和链接的过程中编译器要考虑它们的,而且这些头文件中包含的不仅仅是这些东西,有很多很多。而如果我们的程序不需要这些东西,那编译器就会为它们浪费很多时间。现在把函数和这些全局变量,类,和模板分开,函数定义到头文件中,而全局变量,类,和模板定义到命名空间中,就不会有这种情况了。


命名空间存在的目的,是为了解决全局域的名字污染问题(虽然只是部分解决)。在一个大型项目中,很容易出现大量全局名称,很容易造成名称冲突,初期只能采取加长名称的长度来解决,但是大量的长名称维护起来同样很痛苦,因此,通过命名空间把全局名称都放在不同的作用域中,能有效减少名称冲突的发生,但命名空间并没有完全解决名字污染问题,因为命名空间本身的空间名称也是一个全局名字,同样存在污染问题。



作用域问题:

1.未命名的命名空间的定义局部于特定文件,可以在给定文件中不连续,但从不跨越多个文本文件。

2. 如果头文件定义了未命名的命名空间,那么,在每个包含该头文件的文件中,该命名空间的名字将定义不同的局部实体。

3. 未命名的命名空间用于声明局部于文件的实体。在未命名的命名空间中定义的变量在程序开始时创建,在程序结束之前一直存在,类似C语言中的static静态声明。

4.C++不赞成文件静态声明,应该避免文件静态而使用未命名的命名空间代替。

5.除了在函数或其他作用域内部,头文件不应该包含using指示或using声明。

6.using声明可以出现在全局作用域、局部作用域或者命名空间作用域中。类作用域中的using声明局限于被定义类的积累中定义的名字。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值