C++命名空间_c命名空间
C++命名空间由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“c命名空间”。
C++命名空间namespace 虽然使用命名空间的方法,有多种可供选择。但是不能贪图方便,一味使用using 指令,这样就完全背离了设计命名空间的初衷,也失去了命名空间应该具有的防止名称冲突的功能。
一般情况下,对偶尔使用的命名空间成员,应该使用命名空间的作用域解析运算符来直接给名称定位。而对一个大命名空间中的经常要使用的少数几个成员,提倡使用using声明,而不应该使用using编译指令。只有需要反复使用同一个命名空间的许多数成员时,使用using编译指令,才被认为是可取的。
例如,如果一个程序(如上面的outi.cpp)只使用一两次cout,而且也不使用std命名空间中的其他成员,则可以使用命名空间的作用域解析运算符来直接定位。如: #include ……
std::cout
std::cout
#include ……
using std::cout;cout
l
命名空间别名 标准C++引入命名空间,主要是为了避免成员的名称冲突。若果用户都给自己的命名空间取简短的名称,那么这些(往往同是全局级的)命名空间本身,也可能发生名称冲突。如果为了避免冲突,而为命名空间取很长的名称,则使用起来就会不方便。这是一个典型的两难问题。
标准C++为此提供了一种解决方案——命名空间别名,格式为: namespace 别名 = 命名空间名;例如:(AT&T美国电话电报公司)
namespace American_Telephone_and_Telegraph { // 命名空间名太长
cla String {
String(const char*);
// ……
} }
American_Telephone_and_Telegraph::String s1 // 使用不方便
= new American_Telephone_and_Telegraph::String(“Grieg”);
namespace ATT = American_Telephone_and_Telegraph;// 定义别名
ATT::String s2 = new ATT::String(“Bush”);// 使用方便 ATT::String s3 = new ATT::String(“Nielsen”);l
无名命名空间 标准C++引入命名空间,除了可以避免成员的名称发生冲突之外,还可以使代码保持局部性,从而保护代码不被他人非法使用。如果你的目的主要是后者,而且又为替命名空间取一个好听、有意义、且与别人的命名空间不重名的名称而烦恼的话,标准C++还允许你定义一个无名命名空间。你可以在当前编译单元中(无名命名空间之外),直接使用无名命名空间中的成员名称,但是在当前编译单元之外,它又是不可见的。无名命名空间的定义格式为: namespace {
声明序列可选 } 实际上,上面的定义等价于:(标准C++中有一个隐含的使用指令)
namespace $$$ {
声明序列可选 } using namespace $$$;例如: namespace {
int i;
void f(){/*……*/} } int main(){
i = 0;// 可直接使用无名命名空间中的成员i
f();// 可直接使用无名命名空间中的成员f()}