转载 | 全局作用域和局部作用域

文字转载自:https://www.cnblogs.com/wangguchangqing/p/3556244.html

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

全局作用域(全局变量)

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

 class World
 {
 public:
 World()
 {
 std::cout << "Hello world.\n" ;
 }
  
 ~World()
 {
 std::cout << "Goodbye.\n";
 }
 };
  
 World theWorld ;
  
 int main()
 {
 std::cout << "Hello from main.\n" ;
 return 0 ;
 }

这段代码的执行结果是 :

image

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

 

局部作用域(局部变量)

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

 class World
 {
 public :
 World(int id)
 :identifier(id)
 {
 std::cout << "Hello from " << identifier << ".\n" ;
 }
  
 World ()
 :identifier(0)
 {
 std::cout << "Hello from default constructor .\n" ;
 }
 ~World()
 {
 std::cout << "Goodbye from " << identifier << ".\n" ;
 }
  
 private:
 const int identifier ;
 };
  
 World theWorld ;
  
 int main()
 {
 World smallworld(1);
  
 for(int i = 2 ; i < 4 ; i ++)
 {
 World aWorld(i);
 }
  
 World oneMoreWorld(4);
 }

执行结果为:

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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值