• C++作用域


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

    全局作用域(全局变量)

    在所用函数体外部定义的变量就是全局变量,具有全局作用域。它在main函数执行前创建,mian函数结束后销毁。下面的代码演示了全局变量的创建和销毁:

       1:  class World 
       2:  {
       3:  public:
       4:      World()
       5:      {
       6:          std::cout << "Hello world.
    " ;
       7:      }
       8:   
       9:      ~World()
      10:      {
      11:          std::cout << "Goodbye.
    ";
      12:      }
      13:  };
      14:   
      15:  World theWorld ;
      16:   
      17:  int main()
      18:  {
      19:      std::cout << "Hello from main.
    " ;
      20:      return 0 ;
      21:  }

    这段代码的执行结果是 :

    image

    theWorld对象在main函数执行前被创建,main结束后销毁。

     

    局部作用域(局部变量)

    局部作用域是一对大括号包围的区域,局部变量在在程序流进入其作用域时被创建,退出作用域时被销毁。下面一段代码演示了局部变量的创建和销毁:

       1:  class World 
       2:  {
       3:  public :
       4:      World(int id)
       5:          :identifier(id)
       6:      {
       7:          std::cout << "Hello from " << identifier << ".
    " ;
       8:      }
       9:   
      10:      World ()
      11:          :identifier(0)
      12:      {
      13:          std::cout << "Hello from default constructor .
    " ;
      14:      }
      15:      ~World()
      16:      {
      17:          std::cout << "Goodbye from " << identifier << ".
    " ;
      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:  }

    执行结果为:

    image

    说明:

    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 请求中 缓存 的使用
    charles 中advance repeat(并发请求)
    charles 中 breakingpoint setting 、breakpoints(断点设置打断点)
    (剑指offer) 用两个栈来实现一个队列
    ios系统在h5页面下拉上拉会带动整个webview 出现空白
    (剑指offer)从尾到头打印链表js
    二维数组中的查找
    导航栏吸顶效果
    js归并排序的实现
    vue项目切换不同的tabbar显示不同的内容
  • 原文地址:https://www.cnblogs.com/wangguchangqing/p/3556244.html
Copyright © 2020-2023  润新知