C++随笔-名称空间

C++中的声明区域、潜在作用域、作用域

  • 声明区域:允许对某变量进行声明的区域
  • 潜在作用域:是声明区域的子集。从某变量声明处开始,到某变量声明结束为止,都是某变量的潜在作用域。
  • 作用域:是某变量潜在作用域的子集,为程序中,某变量实际可见的区域范围。

由此可见,只要在不同的声明区域对变量进行声明,就能将该变量加入相应的声明区域,进一步得到相应的该变量的作用域。而通过对变量在不同声明区域以及使用不同关键字进行声明,就可以得到不同存储方案对应的变量。所以变量的存储方案是受声明区域的影响的。

总结一下:如果希望某变量具有某个作用域,换句话说就是希望某变量能在某一区域对程序可见,首先要做的就是将该变量在某一区域进行声明(当然前提是这个区域是个声明区域),之后再根据是否有局部变量将此变量隐藏得到最终的作用域,同样可以根据这个情况对局部变量进行排查,恢复完整的作用域,使作用域=潜在作用域。

在前一篇文章中,介绍了C++中三种变量的存储方案。其中,三种方案在描述各类型变量的存储持续性、链接性和各自的作用域。存储持续性是对变量所存在内存的状态进行分析,链接性是对访问拓展性进行分析,作用域是对可见范围进行分析。而名称空间的引进,能更好地对变量的名称空间进行管理。

名称空间仅被允许在全局声明区域、其他名称空间中被定义,不可以在代码块中被定义。

在名称空间中声明的变量,作用域都是名称空间本身。因此在名称空间外,这些变量对程序不可见,要对其进行访问,则需要使用空间名称解析符::或者是使用using指令声明、using编译指令对namespace进行操作。

再结合上文

如果希望某变量具有某个作用域,换句话说就是希望某变量能在某一区域对程序可见,首先要做的就是将该变量在某一区域进行声明(当然前提是这个区域是个声明区域),之后再根据是否有局部变量将此变量隐藏得到最终的作用域,同样可以根据这个情况对局部变量进行排查,恢复完整的作用域,使作用域=潜在作用域。

对于名称空间中的变量,其原本作用域就是在名称空间内,但是具有外部链接(const除外),因此可以在本文件或其他文件中对名称空间中的变量进行访问。所以在名称空间之外,通过using声明得到的名称空间中的变量的作用域,取决于其声明所在的声明区域,进而得到潜在作用域和作用域。这其实不难理解,包括未引入名称空间时的具有外部链接的静态存储变量也是如此,若在其他文件中对具有外部链接的静态存储变量进行访问,在其他文件中,该变量的作用域同样是取决于对该变量进行声明所在其他文件中的声明区域。

//file1.cpp
#include <...>
typename varname = 1.0;
...
void function1(...);

function1(...){
...
}
...

//file2.cpp
#include <...>
extern typename varname;    // 使用关键字extern对其他文件中的变量进行声明
...

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值