C++变量的生存周期小问题
- C/C++ code
#include <iostream>using namespace std;int i=0;int main(){ int i=1; cout<<i;//(1) { int i=2; cout<<i;//(2) { i+=1; cout<<i;//(3) } cout<<i;//(4) } cout<<i;//(5) return 0;}
//如果第四个i为3,那么第五个i也应该为3啊?
//如果第五个i为1,那么第四个i就应该为2啊?
//第四个i在括号外(相对于最内层的括号而言),答案说是还是跟着括号里的值为3
//而第五个i也在括号外(相对于第二个括号而言),答案却说不跟着括号里的值而是跟着括号外面的值为1了。
//同样都是括号外,怎么差距就这么大呢?
[解决办法]
{
int i=2; //这个i的作用域就在括号里面
cout<<i;//(2)
{
i+=1;
cout<<i;//(3)
}
cout<<i;//(4)
}
[解决办法]
//同样都是括号外,怎么差距就这么大呢?
关键在于你那个i是定义在哪里,第2、3、4个i都是定义在第二个花括号内的那个i,所以第2、3、4个i的值分别是2、3、3
[解决办法]
#include <iostream>
using namespace std;
int i=0;
int main()
{
int i=1;
cout<<i;//(1)
{
int aa=2;
cout<<aa;//(2)
{
aa+=1;
cout<<aa;//(3)
}
cout<<aa;//(4)
}
cout<<i;//(5)
return 0;
}
其实你的代码可以转换成以上的代码,因为你第二次定义i,值得第四个i都是在同一对大括号里面,出了大括号,它的生命周期也就完了
[解决办法]
#include <iostream>
using namespace std;
int i=0; //这个 是全局变量,会被局部同名变量覆盖
int main()
{
int i=1; // main函数里的 局部变量,这个和第五个 一样
cout<<i;//(1) 输出上面的1
{
int i=2; //在{} 内定义的一个局部变量,{} 可以限定变量作用域,就和函数差不多
cout<<i;//(2) 输出上面的2
{
i+=1; //访问的是上面的i=2
cout<<i;//(3) //输出3
}
cout<<i;//(4) //和上面的 i=2 处于同一 {} 内,值为3
}
cout<<i;//(5) //和第一个 位于同一个大括号内 值为1
return 0;
}