在论坛中看到一段代码,使用了名字空间,不明白,后去查了资料,总结如下:
随着程序的复杂,应用程序将由多个源文件组成,而且多个开发者将开发和管理每个源文件,最后将组织和连接分开的多个文件以产生最终的应用程序。传统地,文件管理要求所有源文件中的名字必须分离相同的全局名字空间,这些源文件没有被封装在限定的名字空间中(也就是说不限制其范围,如函数体、类体、或转换单元),因此在连接分开的模块时,编译器将发现名字的多个定义,此时需要用某种方法来区分每个名字。C++的namespace关键字提供了解决全局范围的“名字冲突”问题的方法。关键字namespace允许把应用程序分成多个子系统,每个子系统能够在自己的范围内定义和操作,在子系统内每个开发者都 可方便地定义标识符,而不用担心其他人是否也使用了相同的标识符,每个名字空间使用唯一的标识符。程序定义名字空间时,编译器通过每个名字空间的唯一标识符而知道整个应用程序的子系统范围。
使用C++的名字空间需要两个步骤
第一步:namespace关键字唯一地标识一个名字空间
第二步:using关键字访问以前标识的名字空间的元素
使用名字空间
namespace关键字用于结构、枚举类型、联合、或类的定义,其一般格式如下所示:
namespace name{
//object declarations
}
在自己的程序中,在名字空间定义内可包含编译器所支持的任何类型的变量(C和C++的简单类型,或者以前定义的类、结构、联合),同样也可以定义函数,例如下面的代码片断在名字空间limited内申明了两个变量和一个函数:
在上面的代码片断中,i、k、sample函数是limited名字空间的一部分,因为名字空间定义了一个范围,所以必须使用作用域分辨符引用对象,这些对象在名字空间内定义。例如给变量k赋10,必须使用和下面相似的语句:
limited::k=10;
对名字空间用using语句
如果程序将频繁地使用名字空间内的成员,则可用using语句简化对这些成员的访问,using语句有两种格式,如下所示:
using namespace name;
using name::member;
第一种格式允许访问整个名字空间,第二种格式只能访问名字空间中指定的成员。本质上,第一种格式使整个名字空间公有,第二种格式在名字空间中封装某些成员。为更好地理解using语句的两种格式,仔细看下面的代码片段,它使用了两种格式:
using limited::k; //only makes k visible
k=10;
using namespace limited; //makes entire limited namespace visible
k=10;
using namespace std;语句
using语句使程序访问给定名字空间内的变量名,在这个特定的情况下,using语句使程序访问std名字空间内的变量和类,std是标准模板库的标准名字空间,不管程序什么时候使用标准模板库的构件,都必须包含using namespace std语句,否则编译器不能确认是标准模板库的类还是程序实用的其他类。