C++循环体内变量声明问题

来源:百度知道 编辑:UC知道 时间:2024/05/22 16:08:52
引用我一个冒泡排序的例子
void bubble_sort(seqList R) //冒泡排序算法
{
for(int i=1;i<max_elem;i++)
{
bool exchange = false;
for (int j = max_elem - 1;j>=i;j-- )
if(R[j + 1].key < R[j].key) //交换记录
{
R[0] = R[j+1];
R[j+1] = R[j];
R[j] = R[0];
exchange = true;
}
if(!ecchange) return;
}
}

--------------------------------------------------
在for循环体内有一个
bool exchange = false;
是不是在每次循环时都生成一个exchange呢,
那么这样一来效率不是太低了吗?
不如在程序开始直接声明一个。

我的意思是问在C++中,循环体内的变量声明
是不是每次循环时都是系统new来的?
还是早就在循环执行前就预分配好了。

如果你是用bool exchange = false的话,那么就每次循环时都生成一个exchange;下次循环时销毁,就如你所说"不如在程序开始直接声明一个。"
而new的话就没有那么好运了,每次执行一次就分配个空间,如果你的是无限循环的话,那么内存将会被耗尽.new 是在执行循环时才分配的,不是系统早就分好了的

当然不是,只 在第一次的时候分配空间!