for 循环中i++ 和++i 有什么区别
在for循环中,如:for(i=0;i<5;i++)与
for(i=0;i<5;++i)
在for循环的次数上没有区别;
那么 两种写法效率不同?
单独一条语句都是inc ebx。 比较效率无意义。正确规范的写法是i++。任何时候都不要++i。 对于目前的编译器而言,这两种写法,没有差异。
还是多用 i++ 吧。 本帖最后由 ackyee 于 2018-7-30 09:00 编辑
单纯从i++跟++i来来看是有差异的 i++是先用后加 ++i是先加后用
比方说
i=0;
a=i++; 结果a是0
a=++i; 结果a是1
两条语句之后的运算结果 i都是1
没仔细看 楼主问的for循环,那是否一样没实践过 用在你这里没区别。
i++是先引用i,用完了再+;++i是先+,加完了再引用新的i。 ackyee 发表于 2018-7-30 08:58
有差异的大家没有好好看书,i++是先用后加 ++i是先加后用
比方说
i=0;
这是 i++ 和 ++i 的区别。
而不是在 for 循环中,使用 i++ 和 ++i 的差别。 security 发表于 2018-7-30 09:01
这是 i++ 和 ++i 的区别。
而不是在 for 循环中,使用 i++ 和 ++i 的差别。
是的我刚漏看了 就是先使用,还是先自加一的区别 如果i只是一般的变量(基本类型),那么没有区别,现在的优化编译器很清楚你需要做什么。
但如果i是一个重载了两种operator++的对象来说,那就有区别了,后++可能会产生额外的对象拷贝,而且因为副作用的不确定性,编译器也不能自作主张的用前++来取代。 ackyee 发表于 2018-7-30 08:58
单纯从i++跟++i来来看是有差异的 i++是先用后加 ++i是先加后用
比方说
i=0;
结论:有自加又使用时才有区别,加了不用没有区别。 真不清楚 这些技巧是为了书写方便还是炫技。难道多写一个等式就这么难吗。国内C考试很多时候就考这种玩意{:huffy:} for(auto a:m_xx) for_each 独立语句,没有差别。 在for循环中,没有区别,都是i=i+1的结果,效率一样。总是要执行++ 先加明显少循环一次! yoz 发表于 2018-7-30 09:17
如果i只是一般的变量(基本类型),那么没有区别,现在的优化编译器很清楚你需要做什么。
但如果i是一个重 ...
后++产生额外的对象拷贝 怎么理解呀 ? 完全一样。 wq_601840968 发表于 2018-7-30 11:53
后++产生额外的对象拷贝 怎么理解呀 ?
后++得保存一份原来的对象并返回。 hz_fujian 发表于 2018-7-30 11:51
先加明显少循环一次!
要不, 你这样看?
for(i=0;i<5;){
++i;
} 于非比较级内使用完全无差别,但是使用于单纯仅是想让 i 多加个 1 时,建议还是别使用 ++i 较好。
为何会说别这样用较好?因为 C 是可以被继承与移植的,接手您的代码的人或日后将其代码贴在网路上,我不知道会有多少人用异样的眼光看您啊?!哈~ {:titter:}
先加后用和先用后加的区别吧
5楼说的挺对的啊 for循环是先判断后执行i++ / ++i, 所以没区别 先取后加与先加后取,c的语法表达己经很直观了 wy2000 发表于 2018-7-30 09:42
真不清楚 这些技巧是为了书写方便还是炫技。难道多写一个等式就这么难吗。国内C考试很多时候就考这种玩意{: ...
a++比a=a+1的好处是阅读方便,试想一下如果a是一个很长的变量名时,写成后者就需要看两次变量 效率是一样的,但是约定熟成只有第一种写法 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种写法都编译成一样的机器代码了,因此没什么区别。 EddieZhu 发表于 2018-7-30 17:06
1、在C++中,如果使用stl迭代器的话,推荐使用前缀++,比如:
vector vec = {1, 2, 3, 4 };
受教,感谢;
在使用迭代器时,还是有区别的,其他情况应该没有区别。 EddieZhu 发表于 2018-7-30 17:06
1、在C++中,如果使用stl迭代器的话,推荐使用前缀++,比如:
vector vec = {1, 2, 3, 4 };
耗资源的话,应该还是 debug 配置,
开了优化的话,编译器应该要能优化掉的,因为这个临时变量并没有用吧。 放在for中都一样,但为了把自己绕晕,推荐用i++ for中无差别 如果i是u8,把5改成255试试,就知道区别了 zt2012 发表于 2018-7-31 21:48
如果i是u8,把5改成255试试,就知道区别了
这样做的话,不管哪种写法,都不会退出这个循环的呀。 for(i=0;i<5;i++){print i;}与 for(i=0;i<5;++i){print i;} 你就知道区别了。 ackyee 发表于 2018-7-30 08:58
单纯从i++跟++i来来看是有差异的 i++是先用后加 ++i是先加后用
比方说
i=0;
你的解释是正确的。
{:lol:} winfisher 发表于 2018-8-1 14:03
for(i=0;i
不理解,
你这写法,有区别吗? security 发表于 2018-8-1 14:31
不理解,
你这写法,有区别吗?
有区别,我认为前面一个更好看{:titter:}
在for的后处理位置,结果都一样 最烦这种写花样的了,明明有容易理解的方法,偏要写个花出来{:lol:} 感觉是一样的
页:
[1]