C++中的命名空间实例分析
这篇“C++中的命名空间实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++中的命名空间实例分析”文章吧。
命名空间的特性首先熟悉一下命名空间的两个概念。
声明区域:可以在其中进行声明的区域,如全局文件的声明区域是文件,函数内声明的变量声明区域为代码块。潜在作用域:潜在作用域从声明点开始,到其声明区域的结尾。因此潜在作用域比声明区域小,因为变了必须定义后才能使用。
这两个概念通过下图很好理解,也是编程的常识。
可以使用如下语法声明命名空间和空间成员
namespaceJack{doublea;structb{};voidf();}全局命名空间
如果未在显式命名空间中声明某个标识符,则该标识符属于隐式全局命名空间的一部分。 一般情况下,尝试避免在全局范围内进行声明(入口点 Main 函数除外,它必须位于全局命名空间中)。
全局命名空间可以是用 ::var
来调用。
即同一个命名空间可以在多个文件中定义,如
file1.cpp
namesapceA{inta;}
file2.cpp
namesapceA{intb;}
在编译时会将分散在各个文件中的同一个命名空间集合在一起。
嵌套命名空间命名空间也是可以嵌套的
namespaceA{namespaceB{}}using声明和using编译指令
using声明将特定的名称添加到它所属的声明区域中,例如using A::a;
,相当于 Java 中的静态导入,而using 编译指令使名称空间的所有名称都可以用,而不需要使用作用于解析符,如 using namespace std;
,作用相当于 Java 中的。import java.util.*
。这里记录一下注意点。
usingA::pal;usingB::pal;//errordeclarationconflictpal=4;
上述代码会引起冲突。
一般而言使用using声明会更安全点。
命名空间名称必须是唯一的,这意味着通常它们不应太短。 如果名称的长度使代码难以读取,或在不能使用 using 指令的标头文件中键入枯燥,则可以创建一个命名空间别名作为实际名称的缩写。 例如:
namespacea_very_long_namespace_name{classFoo{};}namespaceAVLNN=a_very_long_namespace_name;voidBar(AVLNN::Foofoo){}综合代码示例
#include<iostream>usingnamespacestd;namespaceA{inta=100;namespaceB//嵌套一个命名空间B{inta=20;}}inta=200;//定义一个全局变量intmain(intargc,char*argv[]){cout<<"A::a="<<A::a<<endl;cout<<"A::B::a="<<A::B::a<<endl;cout<<"a="<<a<<endl;cout<<"::a="<<::a<<endl;inta=30;cout<<"a="<<a<<endl;cout<<"::a="<<::a<<endl;return0;}
output:
A::a =100
A::B::a =20
a =200
::a =200
a =30
::a =200
以上就是关于“C++中的命名空间实例分析”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。