C++作用域
作用域通常和变量捆绑在一起,限定了变量可用范围,同时也规定了变量的生命周期:何时创建、何时销毁。作用域通常分为:全局作用域和局部作用域。
全局作用域(全局变量)
在所用函数体外部定义的变量就是全局变量,具有全局作用域。它在main函数执行前创建,mian函数结束后销毁。下面的代码演示了全局变量的创建和销毁:
1: class World
2: {
3: public:
4: World()
5: {
6: std::cout << "Hello world.\n" ;
7: }
8:
9: ~World()
10: {
11: std::cout << "Goodbye.\n";
12: }
13: };
14:
15: World theWorld ;
16:
17: int main()
18: {
19: std::cout << "Hello from main.\n" ;
20: return 0 ;
21: }
这段代码的执行结果是 :

theWorld对象在main函数执行前被创建,main结束后销毁。
局部作用域(局部变量)
局部作用域是一对大括号包围的区域,局部变量在在程序流进入其作用域时被创建,退出作用域时被销毁。下面一段代码演示了局部变量的创建和销毁:
1: class World
2: {
3: public :
4: World(int id)
5: :identifier(id)
6: {
7: std::cout << "Hello from " << identifier << ".\n" ;
8: }
9:
10: World ()
11: :identifier(0)
12: {
13: std::cout << "Hello from default constructor .\n" ;
14: }
15: ~World()
16: {
17: std::cout << "Goodbye from " << identifier << ".\n" ;
18: }
19:
20: private:
21: const int identifier ;
22: };
23:
24: World theWorld ;
25:
26: int main()
27: {
28: World smallworld(1);
29:
30: for(int i = 2 ; i < 4 ; i ++)
31: {
32: World aWorld(i);
33: }
34:
35: World oneMoreWorld(4);
36: }
执行结果为:

说明:
- 为类World添加了一个常量成员identifier,用来标识World的不同实例。identifier在构造函数的前导中初始化。
- 执行时,在main前调用默认构造函数创建theWorld
- 进入main函数,首先创建smallWorld(identifier = 1),smallWorld的是main函数内的局部变量,作用域是整个main函数
- 进入for循环局部作用域,创建和销毁了identifier = 2和identifier = 3的World两个实例
- for作用域结束,进入到main局部作用域,创建局部变量oneMoreWorld (identifier = 4)
- main作用域结束,销毁main作用域内的局部变量。销毁局部变量时和创建的顺序相反,即先销毁oneMoreWorld,然后是smallWorld
- 最后程序执行到末尾,销毁全局变量theWorld.
总结
最近在看《程序员修炼之道》,里面说:“程序员向别人解释他所做的事情都会有困难。”。自己知道,但是写出来或者讲述给别人,对于我来说确实有点困难。写篇博客都费劲…
,中学时候的语文没学好啊。以后要加强锻炼,坚持写下去!
C++作用域的更多相关文章
- Javascript 的执行环境(execution context)和作用域(scope)及垃圾回收
执行环境有全局执行环境和函数执行环境之分,每次进入一个新执行环境,都会创建一个搜索变量和函数的作用域链.函数的局部环境不仅有权访问函数作用于中的变量,而且可以访问其外部环境,直到全局环境.全局执行环境 ...
- JS核心系列:浅谈函数的作用域
一.作用域(scope) 所谓作用域就是:变量在声明它们的函数体以及这个函数体嵌套的任意函数体内都是有定义的. function scope(){ var foo = "global&quo ...
- JavaScript模仿块级作用域
avaScript 没有块级作用域的概念.这意味着在块语句中定义的变量,实际上是在包含函数中而非语句中创建的,来看下面的例子: function outputNumbers(count){ for ( ...
- Spring中Bean的作用域、生命周期
Bean的作用域.生命周期 Bean的作用域 Spring 3中为Bean定义了5中作用域,分别为singleton(单例).protot ...
- js学习之变量、作用域和内存问题
js学习之变量.作用域和内存问题 标签(空格分隔): javascript 变量 1.基本类型和引用类型: 基本类型值:Undefined, Null, Boolean, Number, String ...
- ES6(块级作用域)
我们都知道在javascript里是没有块级作用域的,而ES6添加了块级作用域,块级作用域能带来什么好处呢?为什么会添加这个功能呢?那就得了解ES5没有块级作用域时出现了哪些问题. ES5在没有块级作 ...
- JavaScript基础学习-函数及作用域
函数和作用域是JavaScript的重要组成部分,我们在使用JavaScript编写程序的过程中经常要用到这两部分内容,作为初学者,我经常有困惑,借助写此博文来巩固下之前学习的内容. (一)JavaS ...
- 深入理解javascript函数定义与函数作用域
最近在学习javascript的函数,函数是javascript的一等对象,想要学好javascript,就必须深刻理解函数.本人把思路整理成文章,一是为了加深自己函数的理解,二是给读者提供学习的途径 ...
- JavaScript作用域
JavaScript作用域 JavaScript作用域一直是前端开发的难题,现在只要用五句话就可解决. 一.“JavaScript中无块级作用域” 在Java或C#中存在块级作用域,即:大括号也是一个 ...
- javascript中的变量作用域以及变量提升
在javascript中, 理解变量的作用域以及变量提升是非常有必要的.这个看起来是否很简单,但其实并不是你想的那样,还要一些重要的细节你需要理解. 变量作用域 “一个变量的作用域表示这个变量存在的上 ...
随机推荐
- ubuntu下 编译安装swftools
1.下载:http://www.swftools.org/download.html2.安装: tar -zvxf swftools-0.x.x.tar cd swftools-0.x.x ./con ...
- iOS中assign、copy 、retain等关键字的含义
iOS中assign.copy .retain等关键字的含义 转自:http://my.oschina.net/majiage/blog/267409 assign: 简单赋值,不更改索引计数cop ...
- 多位数每一位个系数:个位num%10;十位num/10%10.......
请输出满足这样条件的五位数. 个位=万位 十位=千位 个位+十位+千位+万位=百位 思路: 1.定义一个要操作的五位数变量num 2.求出每一位个系数 个:num%10 十:num/10%10 百:n ...
- WPF之命令浅谈
一.认识命令 1.1命令的特点 提到“命令”,我们应该想到命令的发出者,命令的接受者,命令的内容,准备工作,完成任务,回报工作...与事件中的发送者,接受者,消息,处理,处理,处理一一对应,如果是单纯 ...
- Android 知识杂记(MVP模式)
MVP的模式在于将原来activity中业务逻辑的部分剥离出来,代码示例如下: Account public class Account { private String mUsername; pri ...
- HTML和CSS经典布局1
如下图: 需求: 1. 如图 2. 可以从body标签开始. <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xht ...
- MySQL 子分区
200 ? "200px" : this.width)!important;} --> 介绍 子分区其实是对每个分区表的每个分区进行再次分隔,目前只有RANGE和LIST分区 ...
- HaProxy+Keepalived+Mycat高可用群集配置
概述 本章节主要介绍配置HaProxy+Keepalived高可用群集,Mycat的配置就不在这里做介绍,可以参考我前面写的几篇关于Mycat的文章. 部署图: 配置 HaProxy安装 181和1 ...
- 单页面实现之hash
至学了angularJs后,发现这个单页面应用不知道在没有angularJs的情况下怎么实现. 所以就此对这个思考与资料并行,终于知道这个的实现基本原理. 首先angularJs的实现是hash值的变 ...
- 研究一下javascript的模块规范(CommonJs/AMD/CMD)
最近写react需要使用nodejs作为开发环境,需要通过npm安装一些第三方的依赖库,因此慢慢感觉到nodejs基础薄弱对我带来了一些不安全感,尤其是javascript模块这一块听到了很多概念,比 ...