变量的范围

 

  • 范围

  变量有 菊部变量 和 全局变量之分, local variable 和 global variable
  一般在函数体外定义的变量是全局的,函数体内定义的变量只能在函数内使用
  
  
  注意:在同一个范围内,同一个变量名不能定义两次
  
   在不同的空间范围内可以定义同样名字的变量,这时候他们的作用范围也是不同的
  

  • NameSpace
      为了避免命名冲突(因为如果大家都是全局变量的话,程序一多,难免会有冲突,比如说都 int x;作为计数器)
      Namespaces可以把变量约束在不同的命名空间里,通过调用不同的命名空间来指定某个变量,类似于“三年级一班的小明”、“三年级二班的小明”等等
      
      在命名空间内部可以直接使用变量a和b,在外部想引用空间内的对象的话需要使用 “范围操作符” 双冒号 ::
      上面的例子中,如果想在外面使用a和b,myNamespace::amyNamespace::b
      

  命名空间可以有效的避免命名冲突,如下图有两个value()函数,pi虽然定义在bar内部,但是也可以在main里面调用这个量
  
  
  命名空间可以分开写,下面的foo空间分开两次定义了a,c 效果和一下定义a和c是一样的,这只是简单的分行写,甚至还可以分开到不同的文件或者源代码里去定义。
  

  • using
      上面说到了命名空间,我们在引用空间内部的对象的时候,格式是 空间标识符::对象
      通过using我们可以省略前面的空间名字,就像之前的std::cout简写成cout一样,前提是 using namgspace std;  下面看两种using方式
      
      1. 直接把对象using出来直接用,这里是using
      
      
      2.把命名空间引出来,using namespace,他里面的所有成员可以直接用,但是其他空间里的同名变量还是得按标准来。这里是using namespace
      
      这个例子如果再using namespace second;就会报错了,两个空间里都有x y,编译器无法确定用哪个空间里的。

  using namespace具有自己的使用范围,在全局using和在代码片里using,各自的范围就是全局和对应的代码范围。
  

阅读原文

变量的范围 namespace的更多相关文章

  1. django removing hardcoded URLs in template --- 使用变量,把url放在变量中 {% url 'namespace:name' %}

    urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^votes/', include("polls.urls", na ...

  2. C++中的命名空间

    一,命名空间(namespace)的基本概念以及由来 1.什么是标识符: 在C++中,标识符可以是基本的变量,类,对象,结构体,函数,枚举,宏等. 2.什么是命名空间: 所谓的命名空间是指标识符的可见 ...

  3. CVE-2015-7645 analyze and exploit

    Hack team之后adobe和google合作对flash进行了大改,一度提高了flash的利用门槛,CVE-2015-7645作为第一个突破这些限制的漏洞利用方式,可以作为vetect利用方式之 ...

  4. 初学Less

    使用Less Server-side usage npm安装 命令行使用 在代码中使用 Client-side usage 语言特性 Variables Mixins Nested Rules Ope ...

  5. CodeSmith 介绍

    代码生成器作用 中国有句古语叫做“工欲善其事,必先利其器”,用通俗的话来说就是“磨刀不误砍柴功”,古人的这些话告诉我们:要把事情做好,事先应该准备合适的工具.工具不仅仅包括器具, 还包括思想.理论.经 ...

  6. MMORPG大型游戏设计与开发(客户端架构 part16 of vegine)

    由于近来比较忙碌和有些困倦的原因,所以关于这部分的文章没有及时更新,一句话:让朋友们久等了!今天所讲的是客户端vengine(微引擎)中最后一个部分,就像上节所说,这一部分的内容比较多.可能有些朋友看 ...

  7. tornado中使用Mako模版

    tornado是一个优秀的python的开源web 框架,框架本身的性能确实很好,但是他自带的模版只能说是一般般.关于tornado的详细信息可以直接到管网参考. http://www.tornado ...

  8. 关于WinForm/Web如何使用缓存Cach

    原文链接:http://www.cnblogs.com/zfanlong1314/archive/2013/03/28/2986403.html Cache 的绝对到期与滑动到期 绝对到期:设置绝对过 ...

  9. 使用 CodeIgniter 框架快速开发 PHP 应用(七)

    原文:使用 CodeIgniter 框架快速开发 PHP 应用(七) CodeIgniter 和对象这是玩家章节.它讲述的是 CodeIgniter 的工作原理,也就是揭开CI头上'神秘的面纱'.如果 ...

随机推荐

  1. java 动手动脑7

    ---恢复内容开始--- 一.动手动脑:多层的异常捕获-1 阅读以下代码(CatchWho.java),写出程序运行结果: ArrayIndexOutOfBoundsException/内层try-c ...

  2. RocketMQ中Broker的刷盘源码分析

    上一篇博客的最后简单提了下CommitLog的刷盘  [RocketMQ中Broker的消息存储源码分析] (这篇博客和上一篇有很大的联系) Broker的CommitLog刷盘会启动一个线程,不停地 ...

  3. Altium Designer16设置GND和VCC线宽规则的一种操作方法及注意事项

    昨天看到学弟在画电路板,看到他设置电源线线宽时出了一点问题,设置的规则最开始有作用,后来重新从原理图导入更新PCB时,电源线变绿,规则设置点更新也没有用.接下来是操作步骤: 第一步:点击Design- ...

  4. java代码之美(13)--- Predicate详解

    java代码之美(13)--- Predicate详解 遇到Predicate是自己在自定义Mybatis拦截器的时候,在拦截器中我们是通过反射机制获取对象的所有属性,再查看这些属性上是否有我们自定义 ...

  5. 【POJ - 2431】Expedition(优先队列)

    Expedition 直接中文 Descriptions 一群奶牛抓起一辆卡车,冒险进入丛林深处的探险队.作为相当差的司机,不幸的是,奶牛设法跑过一块岩石并刺破卡车的油箱.卡车现在每运行一个单位的距离 ...

  6. -bash: redis: command not found

    在linux中安装redis,先是拉过去安装,然后通过命令:make   进行编译  编译完成以后通过命令 make install 完成安装:结果在进行启动linux的时候执行           ...

  7. 什么时候使用redis?什么时候使用memcache?

    要清楚为什么,redis具有高可用特性,并且可固化,但特性有时候不能成为选择他的理由,一些业务场景中并不需要这样的特性.   什么时候倾向于选择redis? 1.复杂数据结构 value是哈希,列表, ...

  8. [GO语言的并发之道] Goroutine调度原理&Channel详解

    并发(并行),一直以来都是一个编程语言里的核心主题之一,也是被开发者关注最多的话题:Go语言作为一个出道以来就自带 『高并发』光环的富二代编程语言,它的并发(并行)编程肯定是值得开发者去探究的,而Go ...

  9. laya 下以光标为中心缩放对象

    private MouseWheel(e: Laya.Event) { console.log("event"); let currentSp = e.target as Laya ...

  10. npm钉钉脚手架,支持考勤信息获取

    钉钉官方并未提供nodejs包,第一次调用接口的时候非常费事,而且尝试去寻找相关的钉钉考勤数据模块的时候只找到了一些消息啊,只能办公啊,免登啊之类的模块,有关考勤数据的似乎没有 关于dd的npm包中一 ...