c++循环语句中变量的生存周期

本文通过两个示例探讨了C++中循环体内定义的变量生命周期。第一个示例展示了循环体内的变量在每次循环开始时被创建,在循环结束时被销毁。第二个示例则讨论了for语句初始化部分定义的变量的生命周期。

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()



评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值