c++ for循环中定义的变量会影响效率吗?

例如:intsum=0,tmp;for(inti=0;i<10;++i){tmp=i*i+3*i+24;sum+=tmp;}printf("%d\n",sum):如果把t... 例如:
int sum = 0, tmp;
for (int i = 0; i < 10; ++i) {
tmp = i * i + 3*i + 24;

sum += tmp;

}
printf("%d\n", sum):

如果把tmp的定义改成在for循环中定义:
int sum = 0;
for (int i = 0; i < 10; ++i) {
int tmp = i * i + 3*i + 24;

sum += tmp;

}
printf("%d\n", sum):

如果循环次数很多的话,效率会有不同吗?
展开
 我来答
houliang120450
2013-10-06 · 超过42用户采纳过TA的回答
知道小有建树答主
回答量:140
采纳率:0%
帮助的人:106万
展开全部
这里面其实有一点是比较需要注意的,就是你在for循环里面反复定义的int型变量tmp实际上始终占用的是同一块内存。。。。从这个角度来看,对于内置类型应该影响可以忽略,对于自定义类型需要反复创建和析构应该是有一定影响的
百度网友34adba635
2013-10-06 · TA获得超过367个赞
知道小有建树答主
回答量:296
采纳率:0%
帮助的人:311万
展开全部
对于优化编译的程序而言,上述两个代码片段不会有任何效率上的差异。

不优化的话,第一个效率会好一些。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友af3af09
推荐于2016-01-29 · 超过44用户采纳过TA的回答
知道小有建树答主
回答量:141
采纳率:0%
帮助的人:62.8万
展开全部
变量i=0,i<9,i++
for(i=0,i<9,i++)
当i执行到i=8时就不在循环了!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zjnny
推荐于2016-04-09 · TA获得超过2037个赞
知道小有建树答主
回答量:1055
采纳率:100%
帮助的人:1064万
展开全部
for中改写成简单的过程,两种反汇编如下
int sum = 0,tmp;
0134136E mov dword ptr [sum],0
for (int i = 0; i < 10; ++i) {
01341375 mov dword ptr [i],0
0134137C jmp main+37h (1341387h)
0134137E mov eax,dword ptr [i]
01341381 add eax,1
01341384 mov dword ptr [i],eax
01341387 cmp dword ptr [i],0Ah
0134138B jge main+4Fh (134139Fh)
tmp =24;
0134138D mov dword ptr [tmp],18h

sum += tmp;
01341394 mov eax,dword ptr [sum]
01341397 add eax,dword ptr [tmp]
0134139A mov dword ptr [sum],eax

}
///////////////////////////////////////////
int sum = 0;
00A5136E mov dword ptr [sum],0
for (int i = 0; i < 10; ++i) {
00A51375 mov dword ptr [i],0
00A5137C jmp main+37h (0A51387h)
00A5137E mov eax,dword ptr [i]
00A51381 add eax,1
00A51384 mov dword ptr [i],eax
00A51387 cmp dword ptr [i],0Ah
00A5138B jge main+4Fh (0A5139Fh)
int tmp =24;
00A5138D mov dword ptr [tmp],18h

sum += tmp;
00A51394 mov eax,dword ptr [sum]
00A51397 add eax,dword ptr [tmp]
00A5139A mov dword ptr [sum],eax

}
单看反汇编行数没差别,应该是编译器将c++解释成机器语言的过程进行了一定的优化,
for中换成其他非内置类型,比如带有析构的类,应该就能明显的比较出来了,毕竟需要对临时变量重复的销毁创建
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式