【发布时间】:2010-10-15 03:44:47
【问题描述】:
【问题讨论】:
-
不要忘记序列点!
【问题讨论】:
i++ 是后增量,++i 是前增量。前者允许您在表达式中使用 i 的值,然后在最后增加 i 。后面的增量 i 首先然后允许您使用它。例如:
int value_of_i_before_increment=i++;
和
int value_of_i_after_increment=++i;
【讨论】:
i++ 在语句之后递增 i。 ++i 在评估语句之前递增 i。
【讨论】:
是的。
i++ 是后增量。它返回 i 的副本,然后递增 i 的值。
++i 是预增量。它递增 i,然后返回 i 的值。
【讨论】:
++x = 42。当将预增量考虑为首先增加然后产生对 x 的引用时,除了 x 设置为 42 之外,这怎么能产生任何东西呢?然而它在 C++98 中是正式的 UB,因为它在序列点之间修改了 x 两次。它与允许编译器假设 x 最多有一次更改有关,并且 x 不会同时被修改和使用,因此它可以在寄存器中做事而不用担心最终值,它可以在完整表达式的最后存储到内存中(“正确”或“错误”)。
++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 了解更多信息。
【讨论】: