第17章 用于大型程序的工具(9)
上一篇:http://www.zzzyk.com/kf/201201/115811.html17.2.3 未命名的命名空间
命名空间可以使未命名的,未命名的命名空间(unnamed namespace)在定义时没有给定名字。未命名的命名空间以关键字namespace开头,接在关键字namespace后面的是由花括号定界的声明块。
未命名的命名空间与其他命名空间不同,未命名的命名空间的定义局部于特定文件,从不跨越多个文本文件。
未命名的命名空间可以在给定文件中不连续,但不能跨越文件,每个文件有自己的未命名的命名空间。
未命名的命名空间用于声明局部于文件的实体。在未命名的命名空间中定义的变量在程序开始时创建,在程序结束之前一直存在。
未命名的命名空间中定义的名字可直接使用,毕竟没有命名空间名字来限定它们。不能使用作用域操作符来引用未命名的命名空间的成员。
未命名的命名空间中定义的名字只在包含该命名空间的文件中可见。如果另一文件包含一个未命名的命名空间,两个命名空间不相关。两个命名空间可以定义相同的名字,而这些定义将引用不同的实体。
未命名的命名空间中定义的名字可以在定义该命名空间所在的作用域中找到。如果在文件的最外层作用域中定义未命名的命名空间,那么,未命名的命名空间中的名字必须与全局作用域中定义的名字不同。
//Namespace2.h
#ifndef NAMESPACE2_H
#define NAMESPACE2_H
namespace Andersoft
{
namespace Namespace2
{
class Class1;
class Class2;
}
namespace
{
class Class3;
}
}
#endif
//Namespace2.h
#ifndef NAMESPACE2_H
#define NAMESPACE2_H
namespace Andersoft
{
namespace Namespace2
{
class Class1;
class Class2;
}
namespace
{
class Class3;
}
}
#endif//Class3.cpp
#include "stdafx.h"
#include "NameSpace2.h"
class Andersoft::Class3{
Andersoft::Namespace2::Class2 *c2;
};
//Class3.cpp
#include "stdafx.h"
#include "NameSpace2.h"
class Andersoft::Class3{
Andersoft::Namespace2::Class2 *c2;
};在标准C++中引入命名空间之前,程序必须将名字声明为static,使它们局部与一个文件。文件中静态声明的使用从C语言继承过来,在C语言中,声明为static的局部实体在声明它的文件之外不可见。
C++不赞成文件静态声明。不赞成的特征是在未来版本中可能不支持的特征。应该避免文件静态而使用未命名的命名空间替代。
摘自 xufei96的专栏
补充:软件开发 , C++ ,