博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++作用域
阅读量:6552 次
发布时间:2019-06-24

本文共 1839 字,大约阅读时间需要 6 分钟。

作用域通常和变量捆绑在一起,限定了变量可用范围,同时也规定了变量的生命周期:何时创建、何时销毁。作用域通常分为:全局作用域和局部作用域。

全局作用域(全局变量)

在所用函数体外部定义的变量就是全局变量,具有全局作用域。它在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:  }

执行结果为:

说明:

  1. 为类World添加了一个常量成员identifier,用来标识World的不同实例。identifier在构造函数的前导中初始化。
  2. 执行时,在main前调用默认构造函数创建theWorld
  3. 进入main函数,首先创建smallWorld(identifier = 1),smallWorld的是main函数内的局部变量,作用域是整个main函数
  4. 进入for循环局部作用域,创建和销毁了identifier = 2和identifier = 3的World两个实例
  5. for作用域结束,进入到main局部作用域,创建局部变量oneMoreWorld (identifier = 4)
  6. main作用域结束,销毁main作用域内的局部变量。销毁局部变量时和创建的顺序相反,即先销毁oneMoreWorld,然后是smallWorld
  7. 最后程序执行到末尾,销毁全局变量theWorld.

总结

最近在看《程序员修炼之道》,里面说:“程序员向别人解释他所做的事情都会有困难。”。自己知道,但是写出来或者讲述给别人,对于我来说确实有点困难。写篇博客都费劲…咬牙切齿,中学时候的语文没学好啊。以后要加强锻炼,坚持写下去!

转载地址:http://abnco.baihongyu.com/

你可能感兴趣的文章
Codeforces Ilya and Queries
查看>>
NEWS - InstallShield 2013发布
查看>>
Viewport
查看>>
〖Linux〗Debian 7.1.0 Wheezy使用ltib报错的解决办法
查看>>
〖Android〗(how-to) fix k860/k860i buletooth.
查看>>
static与线程安全 -摘自网络
查看>>
jsf标签,jsp标签与jstl标签
查看>>
使用PHP CURL的POST数据
查看>>
struts2:表单标签
查看>>
mysql字符串截取
查看>>
ASP.NET MVC3 通过Url传多个参数方法
查看>>
遭遇sql server 2005 启动包未能正确加载需要重新安装错误,重装.NET FRAMEWORK经历分析...
查看>>
OAF_VO系列3 - Binding Style绑定方式
查看>>
《Essential C++》读书笔记 之 基于对象编程风格
查看>>
Sublime Text2 常用快捷键
查看>>
ASP.NET MVC上传文件----uploadify的使用
查看>>
VirtualBox创建虚拟电脑、执行Genymotion模拟器报错
查看>>
新生儿操作系统操作手册
查看>>
linux下如何安装charles
查看>>
正在载入数据中效果
查看>>