我很清楚在 C++ 中
int someValue = i++;
array[i++] = otherValue;
效果不同
int someValue = ++i;
array[++i] = otherValue;
但我偶尔会在 for 循环中看到带有前缀递增的语句,或者只是它们自己的语句:
for( int i = 0; i < count; ++i ) {
//do stuff
}
或
for( int i = 0; i < count; ) {
//do some stuff;
if( condition ) {
++i;
} else {
i += 4;
}
}
在后两种情况下,++i
看起来像是在尝试生成看起来很聪明的代码。我在监督什么吗?后两种情况是否有理由使用++i
而不是i++
?
最佳答案
在自己的代码中查看这两个运算符的可能实现:
// Pre-increment
T*& operator ++() {
// Perform increment operation.
return *this;
}
// Post-increment
T operator ++(int) {
T copy = *this;
++*this;
return copy;
}
后缀操作符调用前缀操作符来执行它自己的操作:按照设计和原则上前缀版本将总是比后缀版本快,尽管编译器在许多情况下可以优化这一点(尤其是对于内置类型)。
因此,对前缀运算符的偏好是自然的;另一个需要解释的是:为什么这么多人对在无关紧要的情况下使用前缀运算符感兴趣 - 但没有人对使用后缀运算符感到惊讶。
关于c++ - 为什么在语句中的其他任何地方都没有使用该值的情况下使用++i 而不是 i++ ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1392820/