您的位置:首页 > 编程语言 > C语言/C++

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

2014-09-28 23:32 369 查看
通俗的解释:

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声明局限于被定义类的积累中定义的名字。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: