【问题标题】:c++ Increment operator [duplicate]c ++增量运算符[重复]
【发布时间】:2010-10-15 03:44:47
【问题描述】:

可能重复:
Difference between i++ and ++i in a loop?

i++++i 有区别吗?

【问题讨论】:

  • 不要忘记序列点!

标签: c++ increment


【解决方案1】:

i++ 是后增量,++i 是前增量。前者允许您在表达式中使用 i 的值,然后在最后增加 i 。后面的增量 i 首先然后允许您使用它。例如:

int value_of_i_before_increment=i++;

int value_of_i_after_increment=++i;

【讨论】:

  • +1:命名为 current_i 会更好。
  • @bjskishore123,更改为使其更明显...
【解决方案2】:

i++ 在语句之后递增 i。 ++i 在评估语句之前递增 i。

【讨论】:

    【解决方案3】:

    是的。

    i++ 是后增量。它返回 i 的副本,然后递增 i 的值。

    ++i 是预增量。它递增 i,然后返回 i 的值。

    【讨论】:

    • 等等等等。没有指定顺序(这是许多新手出错并开始相信某些 C++ 表达式在实践中必须具有明确定义的效果的地方)。 i++ 是后增量,因为“++”在(后)“i”之后;它增加“i”的值并返回“i”的原始值,没有特定的顺序。 :-) 我知道,当您想到如何将其作为一项任务来完成时,这听起来可能很疯狂。要真正理解它,您需要考虑的是编译器如何将值保存在寄存器中并重用它们。
    • @Alf P. Steinbach:我是否说得对,除非您正在做的事情已经是线程不安全的,否则您的观点没有实际效果?还是可以在单线程环境中以某种方式出现?
    • @Scott:第 1 名没有,第 2 名有。考虑++x = 42。当将预增量考虑为首先增加然后产生对 x 的引用时,除了 x 设置为 42 之外,这怎么能产生任何东西呢?然而它在 C++98 中是正式的 UB,因为它在序列点之间修改了 x 两次。它与允许编译器假设 x 最多有一次更改有关,并且 x 不会同时被修改和使用,因此它可以在寄存器中做事而不用担心最终值,它可以在完整表达式的最后存储到内存中(“正确”或“错误”)。
    【解决方案4】:

    ++c 是前置增量,所以你在使用它之前增加值,c++ 是后置增量,所以你使用这个值然后增加它。

    int c;
    c = 5;
    cout << c++; // prints 5, then sets the value to 6
    c = 5;
    cout << ++c // sets the value to 6, then prints 6
    

    所以这可能会对循环等产生影响,即

    int i;
    for (i=0; i < 2; i++) cout << i; // prints 0, then 1
    for (i=0; i < 2; ++i) cout << i; // prints 1, then 2
    

    还有潜在的性能影响。请参阅this post 了解更多信息。

    【讨论】:

      猜你喜欢
      • 2017-07-06
      • 2023-03-26
      • 2012-11-23
      • 2010-12-29
      • 1970-01-01
      • 1970-01-01
      • 2014-01-19
      • 2015-09-25
      • 2015-04-17
      相关资源
      最近更新 更多