1、本人突发奇想,突然想到c++循环体中变量的生命周期。
从形式上看,循环体中定义的变量总是存在作用域(花括号{}中),那么变量在循环
未结束前是否一致存在呢?在vs2013下测试得到的结果是否定的。
例,
class base{
public:
base(){ std::cout << "base()" << std::endl; }
~base(){
std::cout << "~base()" << std::endl;
}
base(const base &b){ std::cout << "base(const base &b)" << std::endl; }
};
base bs;
for (int i = 0; i < 3; ++i)
{
std::cout << "i = " << i << std::endl;
base b = bs;
}上述代码的输出结果为:
base() //bs对象创建
i = 0
base(const base &b)
~base()
i = 1
base(const base &b)
~base()
i = 2
base(const base &b)
~base()
~base()//bs对象销毁
//-------------------------------------------
从例子中的输出结果来看,循环体中的base b = bs;在每次循环中,均创建一个变量,并在该次循环
结束后销毁。即,相当于每次循环都具备一个循环体的作用域,变量在循环体中创建与销毁。
另外,while,do-while循环体与for的循环体一致。
2、for语句中的初始状态处定义的变量创建一次并在循环语句结束后销毁。
例,
int ii = 0;
for (base bb;ii < 3;++ii)
{
std::cout << "ii = " << ii << std::endl;
}输出结果:
base()
ii = 0
ii = 1
ii = 2
~base()
本文通过两个示例探讨了C++中循环体内定义的变量生命周期。第一个示例展示了循环体内的变量在每次循环开始时被创建,在循环结束时被销毁。第二个示例则讨论了for语句初始化部分定义的变量的生命周期。
164

被折叠的 条评论
为什么被折叠?



