wq_601840968 发表于 2018-7-30 08:27:35

for 循环中i++ 和++i 有什么区别

在for循环中,如:
   for(i=0;i<5;i++)与
   for(i=0;i<5;++i)
在for循环的次数上没有区别;
那么 两种写法效率不同?

wye11083 发表于 2018-7-30 08:29:46

单独一条语句都是inc ebx。

bblythe2017 发表于 2018-7-30 08:37:50

比较效率无意义。正确规范的写法是i++。任何时候都不要++i。

security 发表于 2018-7-30 08:51:07

对于目前的编译器而言,这两种写法,没有差异。
还是多用 i++ 吧。

ackyee 发表于 2018-7-30 08:58:31

本帖最后由 ackyee 于 2018-7-30 09:00 编辑

单纯从i++跟++i来来看是有差异的   i++是先用后加    ++i是先加后用   
比方说   
i=0;
a=i++;   结果a是0   
a=++i;   结果a是1

两条语句之后的运算结果 i都是1

没仔细看 楼主问的for循环,那是否一样没实践过

zb05022005 发表于 2018-7-30 08:59:57

用在你这里没区别。
i++是先引用i,用完了再+;++i是先+,加完了再引用新的i。

security 发表于 2018-7-30 09:01:03

ackyee 发表于 2018-7-30 08:58
有差异的大家没有好好看书,i++是先用后加    ++i是先加后用   
比方说   
i=0;


这是 i++ 和 ++i 的区别。
而不是在 for 循环中,使用 i++ 和 ++i 的差别。

ackyee 发表于 2018-7-30 09:01:27

security 发表于 2018-7-30 09:01
这是 i++ 和 ++i 的区别。
而不是在 for 循环中,使用 i++ 和 ++i 的差别。

是的我刚漏看了

Yzzhh18 发表于 2018-7-30 09:05:01

就是先使用,还是先自加一的区别

yoz 发表于 2018-7-30 09:17:02

如果i只是一般的变量(基本类型),那么没有区别,现在的优化编译器很清楚你需要做什么。
但如果i是一个重载了两种operator++的对象来说,那就有区别了,后++可能会产生额外的对象拷贝,而且因为副作用的不确定性,编译器也不能自作主张的用前++来取代。

supertankhzt 发表于 2018-7-30 09:17:07

ackyee 发表于 2018-7-30 08:58
单纯从i++跟++i来来看是有差异的   i++是先用后加    ++i是先加后用   
比方说   
i=0;


结论:有自加又使用时才有区别,加了不用没有区别。

wy2000 发表于 2018-7-30 09:42:15

真不清楚 这些技巧是为了书写方便还是炫技。难道多写一个等式就这么难吗。国内C考试很多时候就考这种玩意{:huffy:}

liangerfan 发表于 2018-7-30 09:54:36

for(auto a:m_xx) for_each

leafstamen 发表于 2018-7-30 10:41:46

独立语句,没有差别。

mPiDDR 发表于 2018-7-30 11:46:55

在for循环中,没有区别,都是i=i+1的结果,效率一样。总是要执行++

hz_fujian 发表于 2018-7-30 11:51:25

先加明显少循环一次!

wq_601840968 发表于 2018-7-30 11:53:30

yoz 发表于 2018-7-30 09:17
如果i只是一般的变量(基本类型),那么没有区别,现在的优化编译器很清楚你需要做什么。
但如果i是一个重 ...

后++产生额外的对象拷贝 怎么理解呀 ?

WaterToSea 发表于 2018-7-30 11:59:28

完全一样。

yoz 发表于 2018-7-30 12:46:57

wq_601840968 发表于 2018-7-30 11:53
后++产生额外的对象拷贝 怎么理解呀 ?

后++得保存一份原来的对象并返回。

浮华一生 发表于 2018-7-30 12:55:27

hz_fujian 发表于 2018-7-30 11:51
先加明显少循环一次!

要不, 你这样看?
for(i=0;i<5;){
        ++i;
}

xyz543 发表于 2018-7-30 15:09:05

于非比较级内使用完全无差别,但是使用于单纯仅是想让 i 多加个 1 时,建议还是别使用 ++i 较好。
为何会说别这样用较好?因为 C 是可以被继承与移植的,接手您的代码的人或日后将其代码贴在网路上,我不知道会有多少人用异样的眼光看您啊?!哈~ {:titter:}

碎碎叨 发表于 2018-7-30 15:39:57

先加后用和先用后加的区别吧
5楼说的挺对的啊

sniper.q 发表于 2018-7-30 16:07:15

for循环是先判断后执行i++ / ++i, 所以没区别

camtime 发表于 2018-7-30 16:08:39

先取后加与先加后取,c的语法表达己经很直观了

zhugean 发表于 2018-7-30 16:44:13

wy2000 发表于 2018-7-30 09:42
真不清楚 这些技巧是为了书写方便还是炫技。难道多写一个等式就这么难吗。国内C考试很多时候就考这种玩意{: ...

a++比a=a+1的好处是阅读方便,试想一下如果a是一个很长的变量名时,写成后者就需要看两次变量

zhugean 发表于 2018-7-30 16:46:43

效率是一样的,但是约定熟成只有第一种写法

EddieZhu 发表于 2018-7-30 17:06:45

1、在C++中,如果使用stl迭代器的话,推荐使用前缀++,比如:

vector<int> vec = {1, 2, 3, 4 };
for (vector<int>::iterator it = vec.begin(); it != vec.end(); ++it)
{
   ......
}
++it是重载了前缀++运算符,实现一般是当前对象向前走一步,然后返回当前对象的引用*this。如果是后缀++的话,实现是先把当前对象赋值给一个临时对象,然后当前对象向前走一步,然后返回临时变量的值,这中间涉及到临时变量的构造函数和析构函数调用,比使用前缀++耗资源。

2、但是如果是在C语言中的话,估计编译器把这2种写法都编译成一样的机器代码了,因此没什么区别。

wq_601840968 发表于 2018-7-31 14:45:51

EddieZhu 发表于 2018-7-30 17:06
1、在C++中,如果使用stl迭代器的话,推荐使用前缀++,比如:

vector vec = {1, 2, 3, 4 };


受教,感谢;
在使用迭代器时,还是有区别的,其他情况应该没有区别。

security 发表于 2018-7-31 15:19:57

EddieZhu 发表于 2018-7-30 17:06
1、在C++中,如果使用stl迭代器的话,推荐使用前缀++,比如:

vector vec = {1, 2, 3, 4 };


耗资源的话,应该还是 debug 配置,
开了优化的话,编译器应该要能优化掉的,因为这个临时变量并没有用吧。

Llinuxu 发表于 2018-7-31 17:52:59

放在for中都一样,但为了把自己绕晕,推荐用i++

wei669 发表于 2018-7-31 21:01:11

for中无差别

zt2012 发表于 2018-7-31 21:48:59

如果i是u8,把5改成255试试,就知道区别了

ALUMEI 发表于 2018-8-1 11:28:03

zt2012 发表于 2018-7-31 21:48
如果i是u8,把5改成255试试,就知道区别了

这样做的话,不管哪种写法,都不会退出这个循环的呀。

winfisher 发表于 2018-8-1 14:03:04

for(i=0;i<5;i++){print i;}与    for(i=0;i<5;++i){print i;}    你就知道区别了。

wuzhujian 发表于 2018-8-1 14:28:30

ackyee 发表于 2018-7-30 08:58
单纯从i++跟++i来来看是有差异的   i++是先用后加    ++i是先加后用   
比方说   
i=0;


你的解释是正确的。
{:lol:}

security 发表于 2018-8-1 14:31:38

winfisher 发表于 2018-8-1 14:03
for(i=0;i

不理解,
你这写法,有区别吗?

laoshuhunya 发表于 2018-8-1 17:40:08

security 发表于 2018-8-1 14:31
不理解,
你这写法,有区别吗?

有区别,我认为前面一个更好看{:titter:}
   

minier 发表于 2018-8-1 20:35:18

在for的后处理位置,结果都一样

rom 发表于 2018-8-1 20:44:56

最烦这种写花样的了,明明有容易理解的方法,偏要写个花出来{:lol:}

unnormal 发表于 2018-8-8 11:11:48

感觉是一样的
页: [1]
查看完整版本: for 循环中i++ 和++i 有什么区别