变量生存期跟变量作用域的区别

变量生存期和变量作用域的区别
#include "stdafx.h"
#include<iostream>

using std::cout;
using std::endl;

int main()
{
int count1=10;
int count3=50;
cout<<endl
<<"value of outer count1="<<count1
<<endl;
{
int count1=20;
int count2=30;
cout<<"value of inner count1="<<count1
<<endl;
count1 += 3;
count3 += count2;
}
cout<<"value of outer count1="<<count1
<<endl
<<"value of outer count3="<<count3
<<endl;
return 0;
}

这段代码明明给count1进行了自加运算,为什么输出的值还是10,而count3的值却改变了呢。
int count1=10;
这段代码定义了变量count1,而后面又接着
int count1=20;

这不就重复定义了吗。我是新手,希望能给个详细的答案。
这是运行结果变量生存期跟变量作用域的区别

------解决方案--------------------
1)C++,类(类型)和作用域,是和生命周期关系不大的。
   类的成员变量,除了静态变量外,都是类的对象的一部分,生命周期和对象一样长。
   类的静态成员变量,生命周期是程序生命周期。

   类的对象的作用域,是定义它的哪个作用域。
   生命周期由对象的定义形式决定。
   
2)C++ 名空间内部直接定义的变量,是属于名空间作用域的全局变量。
   作用域是,名空间。
   匿名名空间内的变量(相当于文件静态变量)
   其他名空间内的变量 
   生命周期是程序生命周期。
  
3)外部变量,文件静态变量,都是整个程序生命周期。
4)函数内部的 静态变量,作用域为函数内部的某个区域,生命周期是 整个程序生命周期。
5)函数内部的自动变量,寄存器变量生命周期是函数调用开始到函数返回,
   或者到抛出异常时之间的某一段时间。
   作用域是函数内部某个区域 。。。。

6)函数参数,生命周期从函数调用开始,到函数调用结束。
   构造函数之外的,作用域是函数内部。
   构造函数,还包括构造函数的初始化表。

7)C++动态分配的对象的,生命周期,是从new,new[] 开始到 delete,delete[] 结束;
   C  动态分配的对象的,生命周期,是从malloc,开始到 free 结束;
       
   动态分配对象,是一种全局的无名对象,通过指针,可以引用它。
   作用域是全局的。生命周期从分配到回收。


------解决方案--------------------
同名的局部变量覆盖了全局变量。
------解决方案--------------------
引用:
Quote: 引用:

同名的局部变量覆盖了全局变量。
似乎懂了,有方括号和没方括号是不一样的,方括号里面的局部变量,他会暂时替代同名的全局变量,等他的生存周期结束时,全局变量恢复,且值不改变,您是这个意思吗
变量生存期跟变量作用域的区别
正确,也就是说编译器会以“就近”原则来处理同名问题,在局部变量的作用域中操作的只是局部的那个,除了这个作用域后的才是那个全局的