族谱网 头条 人物百科

命名空间

2020-10-16
出处:族谱网
作者:阿族小谱
浏览:405
转发:0
评论:0
C++中的命名空间在C++语言中,命名空间是一种实体(entity),使用namespace来声明,并使用{}来界定命名空间体(namespacebody)。例:namespacefoo{intbar;}和C语言的全局作用域兼容,C++具有全局命名空间作用域,对应的命名空间是全局命名空间。全局命名空间不需要声明。使用时,可以用前缀为::的qualified-id显式限定全局命名空间作用域中的名称。例如,::operatornew指称全局new运算符函数。命名空间可以在另一命名空间之中嵌套声明;但不能声明在类和代码块之中。在命名空间中声明的名称,默认具有外部链接属性(除非声明的是const对象,它默认是具有内部链接属性)。按照是否有名字,可分为有名字的命名空间与匿名命名空间。后者的声明为:namespace{namespace-body(即声明序列(可选))}匿名命名空间中的名字具有文件作用...

C++中的命名空间

在C++语言中,命名空间是一种实体(entity),使用namespace来声明,并使用{ }来界定命名空间体(namespace body)。

例:

namespacefoo{intbar;}

和C语言的全局作用域兼容,C++具有全局命名空间作用域,对应的命名空间是全局命名空间。全局命名空间不需要声明。使用时,可以用前缀为::的qualified-id显式限定全局命名空间作用域中的名称。例如,::operator new指称全局new运算符函数。

命名空间可以在另一命名空间之中嵌套声明;但不能声明在类和代码块之中。在命名空间中声明的名称,默认具有外部链接属性(除非声明的是const对象,它默认是具有内部链接属性)。

按照是否有名字,可分为有名字的命名空间与匿名命名空间。后者的声明为:

namespace{namespace-body(即声明序列(可选))}

匿名命名空间中的名字具有文件作用域。这些名字在本编译单元中可以直接使用;也可以用前缀为::的qualified-id显式限定后使用。匿名命名空间中的名字具有内部链接属性。

命名空间的成员,是在命名空间体的花括号内声明了的名称。可以在命名空间体之外,给出命名空间成员的定义。即命名空间的成员声明与定义可以分开。命名空间内的名字,只能有一次定义,但可以多次声明。

嵌套的子命名空间必须定义在上层命名空间体之内。禁止把子命名空间的声明与定义分开。

不能以“命名空间名::成员名;”方式,在命名空间体之外为命名空间添加新成员。必须在命名空间体之中添加新成员的声明。

可以多次声明和定义同一命名空间,每次给这一命名空间添加新成员。同名的命名空间即便在声明位置不同,仍然是同一个实体。

可以在一个命名空间中引入其他命名空间的成员。例如:

namespacemyNameSpace{usingnamespaceHis_NameSpace;usingOLib::List;voidmy_func(String&,List&);}

引用命名空间的成员,有下述办法:

使用命名空间的作用域解析运算符::,如:std::cout

using namespace 命名空间名[::命名空间名…];该语句使指定的命名空间中的目前已经生命的名字都提升到当前语句所在的作用域中可直接使用。如果引入的名字与该语句所在的声明区域的名字发生冲突,则编译器并不会发出任何警告信息,而只是用声明区域中的名字自动隐藏(hiding)命名空间中的同名成员,即使using namespace更靠后也是如此。

using 命名空间名::[命名空间名::……]成员名; 引入命名空间中的一个成员。如果引入的名称与局部名称发生同名冲突,编译器会报错。

命名空间可以有别名:namespace 别名 = 命名空间名; 这使得名字较长的命名空间可以方便地用较短的别名来引用。

C++11起支持内联命名空间。使用inline namespace作为声明的起始。内联命名空间的名称在名称查找时被特别对待,使用qualified-id引用其中的名称时,被内联的命名空间名称可以省略。也即,内联命名空间内的标识符被提升到包含着内联的命名空间的那个父级的命名空间中。内联命名空间可以在修改命名空间名称的同时避免在二进制文件中生成的符号改变,因此不同内联命名空间的名称可以用于标识接口兼容的不同版本,有助于保持二进制兼容性。这也在标准库的实现中被使用,如libstdc++和libc++。

namespaceContoso{namespacev_10{templateclassFuncs{public:Funcs(void);TAdd(Ta,Tb);TSubtract(Ta,Tb);TMultiply(Ta,Tb);TDivide(Ta,Tb);};}inlinenamespacev_20{templateclassFuncs{public:Funcs(void);TAdd(Ta,Tb);TSubtract(Ta,Tb);TMultiply(Ta,Tb);std::vectorLog(double);TAccumulate(std::vectornums);};}}

在XML中的应用

XML虽然不是一个独立的编程语言,但是它的出现使得命名空间的使用变得更为广泛。

在同一个命名空间里,所有的元素名都必须唯一。

声明一个命名空间使用XML保留的属性xmlns,它的值必须是URI(统一资源标志符 Uniform Resource Identifier而非URL--Universal Resource Locator)指代.比如xmlns="".注意,事实上URI是不可读的,但它对XML解析器来说就只是简单不过的字符串.比如,/这个地址本身并不包含任何代码,它只表示XHTML命名空间.使用URI (比如"")去标示一个命名空间,而不是用一个简短的字符串 (比如"xhtml"),这样做是为了减少不同命名空间标示符冲突的可能性.

命名空间的模拟

参见

作用域


免责声明:以上内容版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。感谢每一位辛勤著写的作者,感谢每一位的分享。

——— 没有了 ———
编辑:阿族小谱
发表评论
写好了,提交
{{item.label}}
{{commentTotal}}条评论
{{item.userName}}
发布时间:{{item.time}}
{{item.content}}
回复
举报
点击加载更多
打赏作者
“感谢您的打赏,我会更努力的创作”
— 请选择您要打赏的金额 —
{{item.label}}
{{item.label}}
打赏成功!
“感谢您的打赏,我会更努力的创作”
返回

更多文章

更多精彩文章
打赏
私信

推荐阅读

· 命名日
历史对命名日的庆祝是基督教国家从中世纪就有的一项传统。命名日源于基督教会对圣徒和受难者举行纪念的节日。现在不同的国家有不同的命名日体系。不同国家的命名日希腊在希腊,克里特,塞浦路斯,人们往往共同庆祝命名日,而不是每个人的生日。东正教会依据《圣经》,把一年中的每一天都联系着特定的某一位或几位圣徒。如果某人以某位圣徒命名,在他的命名日,所有有着相同名字的人将举行庆祝活动,他们会得到礼物,还有精美的食品和点心。斯堪的那维亚国家瑞典芬兰捷克现在捷克并没有强制使用命名日来为新生儿命名的法律规定,换言之,现阶段大多数捷克人除了正规出生日的庆生外另外还有命名日的庆生,一般大都市也曾举办大型命名日活动。斯洛伐克匈牙利参见主保圣人
· 恒星命名
固有名称大多数肉眼可见明亮的恒星都有传统的名称,有许多都源自阿拉伯语,但也有少数源自拉丁文的。参考恒星专有名称,其中列出了一部分的名称。但是这些名称,无论中外都仍然有些问题存在:拼字法通常没有标准化:仙女座γ的拼法就有Almach、Almaach、Almack、Alamak。许多恒星有一个以上常用的名字:英仙座α有Mirfak、Algenib、Alcheb等不同的名称;船帆座γ称为Regor或SuhailalMuhlif;大熊座η称为Alkaid或Benetnasch;北冕座α称为Gemma或Alphecca;仙女座α称为Alpheratz或Sirrah。由于古老的星表不够精确,有些星不能确定属于哪个星座。因此有些名字不知道是哪颗星的。例如:Alniyat和Chara。有些在不同星座的恒星有着相同的名字。例如:Algenib可以是英仙座α和飞马座γ;Gienah出现在天鹅座与乌鸦座;Aln...
· IUPAC命名法
IUPAC颜色书总则(General)蓝色书(BlueBook)金色书(GoldBook):绿色书(GreenBook):橙色书(OrangeBook):紫色书(PurpleBook):红色书(RedBook):银色书(SilverBook)白色书(WhiteBook)IUPAC命名法IUPAC已发布的命名法有:有机化学命名法,E部:立体化学有机化学命名法,F部:天然产物和有关化合物有机化学命名法,H部:同位素标记化合物修订的杂环命名法Hantzsch-Widman系统的延伸对于有机化学的可变价的命名法(Lambda约定)规则A-1.1和A-2.5的扩充,关于有机化学中的数字具有累积双键的环状有机物命名法(Delta约定)修订的基、离子、基离子及相关物种的命名法有机化学类名和基与结构的反映中间产物的术语表立体化学基本术语稠环及桥稠环系统的命名法芬命名法,第一部分:芬的母体名称扩展及修订的命...
· 空间
概论亚里斯多德将空间定义为事物的“场所”(希腊语:τόπος)。几何学被用来计算及定义空间。各种空间哲学中的空间物理学中的空间牛顿提出的理论中,空间被视为是两个物体的相对位置,抽象化后形成的一组坐标参考系。数学中的空间
· 美国内战命名
战争本身下列名称曾用以形容这场军事冲突,有些至今仍在使用。各个名称约略以使用频率作为排序基准。前两个名称使用较为长久,其他的则较为零落。常用名称内战内战(CivilWar)是最通用及无偏向性的说法。自20世纪初以来,美国境内的参考书籍、学报、百科、大众历史读物等,以此称呼占压倒性多数。美国国家公园局(NationalParkService)由美国国会成立托管,以保护战场遗址,用的就是这个名称。此名亦为此战最早的称呼,杰佛逊·戴维斯、罗伯特·李、尤里西斯·格兰特、威廉·谢尔曼、皮瑞·波利加德、内森·佛耶斯特、与乔丹·班哲明等重要人物在战前与战争进行中亦使用内战一词。亚伯拉罕·林肯总统于许多场合使用此说法,最著名者为其盖茨堡演说(“…吾辈当下所业浩浩之战…”,“...Nowweareengagedinagreatcivilwar....”)。“美国内战”(AmericanCivilWar),或...

关于我们

关注族谱网 微信公众号,每日及时查看相关推荐,订阅互动等。

APP下载

下载族谱APP 微信公众号,每日及时查看
扫一扫添加客服微信