++i 和 i++ 有什么区别?

++i 和 i++ 有什么区别?

问题描述:

在C中,使用++ii++有什么区别,哪个应该用在for的增量块中> 循环?

In C, what is the difference between using ++i and i++, and which should be used in the incrementation block of a for loop?

  • ++i 将增加 i 的值,然后返回增加的值.

    • ++i will increment the value of i, and then return the incremented value.

       i = 1;
       j = ++i;
       (i is 2, j is 2)
      

    • i++ 将增加 i 的值,但返回 i 增加前的原始值.

    • i++ will increment the value of i, but return the original value that i held before being incremented.

       i = 1;
       j = i++;
       (i is 2, j is 1)
      

    • 对于 for 循环,两者都可以.++i 似乎更常见,也许是因为 K&R.

      For a for loop, either works. ++i seems more common, perhaps because that is what is used in K&R.

      在任何情况下,遵循首选 ++i 而不是 i++"的准则,你就不会出错.

      In any case, follow the guideline "prefer ++i over i++" and you won't go wrong.

      有一些关于 ++ii++ 的效率的评论.在任何非学生项目编译器中,不会有性能差异.您可以通过查看生成的代码来验证这一点,它们将是相同的.

      There's a couple of comments regarding the efficiency of ++i and i++. In any non-student-project compiler, there will be no performance difference. You can verify this by looking at the generated code, which will be identical.

      效率问题很有趣……这是我试图回答的问题:C 中的 i++ 和 ++i 之间有性能差异吗?

      The efficiency question is interesting... here's my attempt at an answer: Is there a performance difference between i++ and ++i in C?

      正如 ​​@OnFreund 所指出的,C++ 对象是不同的,因为 operator++() 是一个函数,编译器不知道优化创建一个临时对象来保存中间值.

      As @OnFreund notes, it's different for a C++ object, since operator++() is a function and the compiler can't know to optimize away the creation of a temporary object to hold the intermediate value.