变量的范围 namespace
变量的范围
- 范围
变量有 菊部变量 和 全局变量之分, local variable 和 global variable
一般在函数体外定义的变量是全局的,函数体内定义的变量只能在函数内使用

注意:在同一个范围内,同一个变量名不能定义两次

在不同的空间范围内可以定义同样名字的变量,这时候他们的作用范围也是不同的

- NameSpace
为了避免命名冲突(因为如果大家都是全局变量的话,程序一多,难免会有冲突,比如说都int x;作为计数器)
Namespaces可以把变量约束在不同的命名空间里,通过调用不同的命名空间来指定某个变量,类似于“三年级一班的小明”、“三年级二班的小明”等等

在命名空间内部可以直接使用变量a和b,在外部想引用空间内的对象的话需要使用 “范围操作符” 双冒号 ::
上面的例子中,如果想在外面使用a和b,myNamespace::a,myNamespace::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的更多相关文章
- django removing hardcoded URLs in template --- 使用变量,把url放在变量中 {% url 'namespace:name' %}
urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^votes/', include("polls.urls", na ...
- C++中的命名空间
一,命名空间(namespace)的基本概念以及由来 1.什么是标识符: 在C++中,标识符可以是基本的变量,类,对象,结构体,函数,枚举,宏等. 2.什么是命名空间: 所谓的命名空间是指标识符的可见 ...
- CVE-2015-7645 analyze and exploit
Hack team之后adobe和google合作对flash进行了大改,一度提高了flash的利用门槛,CVE-2015-7645作为第一个突破这些限制的漏洞利用方式,可以作为vetect利用方式之 ...
- 初学Less
使用Less Server-side usage npm安装 命令行使用 在代码中使用 Client-side usage 语言特性 Variables Mixins Nested Rules Ope ...
- CodeSmith 介绍
代码生成器作用 中国有句古语叫做“工欲善其事,必先利其器”,用通俗的话来说就是“磨刀不误砍柴功”,古人的这些话告诉我们:要把事情做好,事先应该准备合适的工具.工具不仅仅包括器具, 还包括思想.理论.经 ...
- MMORPG大型游戏设计与开发(客户端架构 part16 of vegine)
由于近来比较忙碌和有些困倦的原因,所以关于这部分的文章没有及时更新,一句话:让朋友们久等了!今天所讲的是客户端vengine(微引擎)中最后一个部分,就像上节所说,这一部分的内容比较多.可能有些朋友看 ...
- tornado中使用Mako模版
tornado是一个优秀的python的开源web 框架,框架本身的性能确实很好,但是他自带的模版只能说是一般般.关于tornado的详细信息可以直接到管网参考. http://www.tornado ...
- 关于WinForm/Web如何使用缓存Cach
原文链接:http://www.cnblogs.com/zfanlong1314/archive/2013/03/28/2986403.html Cache 的绝对到期与滑动到期 绝对到期:设置绝对过 ...
- 使用 CodeIgniter 框架快速开发 PHP 应用(七)
原文:使用 CodeIgniter 框架快速开发 PHP 应用(七) CodeIgniter 和对象这是玩家章节.它讲述的是 CodeIgniter 的工作原理,也就是揭开CI头上'神秘的面纱'.如果 ...
随机推荐
- UR机器人通信--上位机通信(python)
一.通信socket socket()函数 Python 中,我们用 socket()函数来创建套接字,语法格式如下: socket.socket([family[, type[, proto]]]) ...
- 按需制作最小的本地yum源
[需求背景] 有时候客户的环境里面只能离线安装文件,此时可以使用CentOS的ISO光盘作为本地源进行安装,或者是制作一个包含了YUM源服务的虚拟机. 无论上面的哪一种方式都不够轻量,我们自己的组件可 ...
- 数据结构之队列java版
//java由于泛型的擦除,用起来十分不方便 abstract class BaseQueue<T>{ abstract boolean enQueue(T x); abstract T ...
- Of efficiency and methodology
There are only too many articles and books which pertains to the discussion of efficiency and method ...
- Spark1——介绍
1.Spark是什么 Spark是一个用来实现快速而通用的集群计算的平台. 2.Spark是一个大一统的软件栈 Spark项目包含多个紧密集成的组件.首先Spark的核心是一个对由很多计算任务组成的. ...
- eclipse安装STS插件遇到的问题
eclipse安装STS插件 第一次接触springboot,对于用惯了eclipse写代码的人来说,接受IDEA确实还要多花点时间去改变下,因为IDEA确实会节省下不必要的写代码时间.废话少说,直接 ...
- Jenkins持续集成项目搭建——基于Python Selenium自动化测试
参考链接:https://www.liaoxuefeng.com/article/1083282007018592 第一步:去官网https://jenkins.io/下载最新的war包 第二步:安装 ...
- SpringCloud微服务小白入门之Eureka注册中心和服务中心搭建示例
一.注册中心配置文件 代码复制区域: spring: application: name: spring-cloud-server server: port: 7000 eureka: instanc ...
- 【原】iOS查找私有API
喜接新项目往往预示的会出一堆问题.解决问题的同时往往也就是学到更多东西的时候,这也许就是学习到新东西最直接最快速的方法吧! 小编经过努力,新项目终于过测试了,可是被苹果大大给拒了,好苦啊,最近的审核真 ...
- 如何使用WorkManager执行后台任务(下)
0x00 WorkManager的高级用法 在上一文中已经了解到 WorkManager的基本用法之后,今天来看看它的一些高级用法: 链式任务调用 唯一任务序列 传递参数和获取返回值 0x01 链式任 ...