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

atlight 2007-09-25 06:07:20

引用我一个冒泡排序的例子
----------------------------------------
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呢,
然后循环完再delete吗?
那么这样一来效率不是太低了吗?
不如在程序开始直接声明一个。

我的意思是问在C++中,循环体内的变量声明
是不是每次循环时都是系统new来的?
还是早就在循环执行前就预分配好了。
...全文
473 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
NaiNaiGeXiong 2007-09-25
  • 打赏
  • 举报
回复
在每次循环中分配变量是情非得已,谁叫语言要模块化呢,不过在栈上分配内置类型的变量是很快的,CPU对栈的硬件设计是优化的,加上栈在高级语言中是自动平衡,所以空间就不会浪费的,我认为应该可以避逸这种情况的,比如把变量定义到函数域中或在函数中定义一人静态变量,没看你的代码,瞎说一下哈
YG200233 2007-09-25
  • 打赏
  • 举报
回复
学习。。。
loops 2007-09-25
  • 打赏
  • 举报
回复
exchange要是一个类的话,倒是每次都要构造、析构,但是不会发生分配空间的事情。
build in类型的话,不用担心开销。
Vitin 2007-09-25
  • 打赏
  • 举报
回复
bool exchange 是在栈上分配的,也就是说,完全没有任何花费!(包括时间和空间)
v风雪山神庙v 2007-09-25
  • 打赏
  • 举报
回复
变量都有个作用域和生存期。在循环内声明的变量,其作用域和生存期都在循环内。这样理解的话,就是每次循环都new,在delete.

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧