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声明局限于被定义类的积累中定义的名字。
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声明局限于被定义类的积累中定义的名字。
相关文章推荐
- C++ 命名空间(namespace)的解释和使用
- 2,3 c++中 #include< >头文件 和 命名空间 Using namespace std的解释和区别
- 分享 C++命名空间的解释
- 分享 C++命名空间的解释 http://blog.chinaunix.net/uid-26874138-id-3215266.html
- C++命名空间的解释
- C++的重载解释与命名空间
- C++ 命名空间解释
- 分享 C++命名空间的解释
- 分享 C++命名空间的解释 20
- C++ 头文件和命名空间
- c++命名空间及头文件
- C++中命名空间使用
- C++ VS C#(2):字符串,命名空间
- C++ 第三篇 关于预处理器指示符和命名空间
- C++命名空间 (转)
- C++命名空间
- C++(二)关于命名空间(转)
- C++的命名空间
- c# 常用命名空间功能解释
- c++使用命名空间的作用