以下为知识DOC为大家进行整理的相关内容,希望对大家有所帮助!
摘要:”作用域是一个名字生效和失效的范围,而这个范围通常以代码块为边界,因此名字空间是翻译者划分的广义作用域。而是c++提供给开发者灵活使用名字空间的方式,可以看作是文件模块中的复合语句块。”
作为一名程序开发者,命名空间和作用域是每门语言中无法绕过的话题。不同的语言命名空间体现出不一样的特性,各类教程无一不通过将各种情况一一罗列,开发者将各种情况一一牢记在心当成世界的法则。
在此仅作为一名开发者的角度对命名空间(非关键字)和作用域进行一些思考和整理。为了跟关键字区分,以下采用名字空间的称呼命名空间。
1. 名字空间
名字空间的作用无非是用于将一个名字跟具体的对象联系起来。名字空间是翻译者视角: 对C++而言是给编译器看的,对而言是给解释器看的,有了这层认识对命名空间的理解就清晰多了。
性质:
名字空间有两个特征:1. 顺序 2.嵌套
顺序:编译器和解释器相当于一个翻译官,拿着本子一行一行读代码,只有见过的名字才会记到本子上,每见过的名字他就不认识(所以C++需要声明 ,需要导入)。
嵌套:当翻译官进入一个新的名字空间时(代码块),翻译官会给这些新名字进行标识划分。
特别地:
根据对象的生命空间名称,名字空间可以分成两类:1.具有全局性质的,2.具有局部性质的
全局性质名字空间内的名字会一直记载翻译官的本子上,可以在任何地方通过名字空间约束去访问(因此类名,命名空间名等不能相同,因为需要用它来表示名字)。
局部性质名字空间内的名字会在离开名字空间(代码块)时被划掉,无法在其他地方使用这些名字。
名字空间总结:名字只有记下来才能使用。在一个名字空间内可以无空间名约束的使用父空间声明的名字,当嵌套体系中存在同名时会使用尾部发现的名字。名字空间是翻译官视角看待名字的,将名字记在一个个不同空间里,当使用名字时不会混乱(记住编译以文件为单位进行的)。一个名字在(定义)声明时会跟一个对象建立联系,名字空间是在使用一个名字时帮助翻译官找到且正确找到对应的名字,而不是其他重名的名字。至于名字跟具体对象如何联系起来是另外的话题空间名称,并非名字空间的职责。2. 作用域
作用域(scope):一个名字可以被使用的范围。作用域是以名字为视角的划分,从名字生效到名字(无空间约束)失效的范围角作用域。
一个代码块可以看作一个领域,任何一个名字在引入该领域后可以在后面直接使用空间名称,在这个领域内划分了新的子领域(代码块)后,在子领域中这个名字依旧可以被直接使用。因此在讨论作用域时,我们通常以代码块为单位进行划分。
3. 总结:
作用域是一个名字生效和失效的范围,而这个范围通常以代码块为边界,因此名字空间是翻译者划分的广义作用域。而是c++提供给开发者灵活使用名字空间的方式,可以看作是文件模块中的复合语句块。
本文地址: https://www.zhishidoc.com/15167.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 859089669@qq.com 举报,一经查实,本站将立刻删除。