i++
和 ++i
在C、C++、Java等语言中都是递增操作符,用于将变量 i
的值增加1。但是,它们之间有一个重要的区别,那就是它们对表达式求值顺序的影响和副作用的执行时间。
-
前缀递增(++i):
- 首先递增
i
的值。 - 然后返回递增后的
i
的值。
由于递增操作在返回值之前执行,所以
++i
常常被称为“前缀递增”或“预递增”。 - 首先递增
-
后缀递增(i++):
- 先返回
i
的当前值。 - 然后递增
i
的值。
由于递增操作在返回值之后执行,所以
i++
常常被称为“后缀递增”或“后递增”。 - 先返回
在赋值操作中,这两个操作符的行为可能不太明显,但在表达式中,它们的区别就很重要了。例如:
c复制代码
int j = 0; | |
int k = 0; | |
j = ++i; // 假设i是1,j将变成2,i也变成2 | |
k = i++; // 假设i现在是2(由于上面的++i操作),k将变成2,但i在赋值后变成3 |
在循环中,这两个操作符也可能产生不同的效果,尽管它们最终都会导致相同的循环次数:
c复制代码
for(int i = 0; i < 5; ++i) { | |
// ... | |
} | |
for(int i = 0; i < 5; i++) { | |
// ... | |
} |
在这两个循环中,++i
和 i++
都会导致循环执行5次。但是,由于 ++i
在比较之前递增,所以它可能在一些微优化的情况下比 i++
稍微快一些(尽管在大多数现代编译器和处理器上,这种差异可以忽略不计)。
总的来说,选择使用 ++i
还是 i++
取决于你希望递增操作在何时发生,以及你是否需要立即使用递增后的值。