c++ - 为什么在语句中的其他任何地方都没有使用该值的情况下使用++i 而不是 i++ ?

标签 c++ operators

我很清楚在 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/

相关文章:

c++ - std::function 的 operator== 的真正目的是什么?

PHP - 不是运算符,还有其他别名吗?

operators - 使用 ALU 运算符向右移一位?

c++ - 如何在 C++ 中处理或避免堆栈溢出

c++ - 在 Linux 上,为什么析构函数在 C++ 中的全局变量共享实例上运行两次?

c++确保将对象分配给一组对象

javascript - 使用 if/else 确定获胜者

c++ - C 风格的指针查询到 C++ 类型转换

c++ - 如何从 MFC 中的线程更改状态栏的 Pane 文本?

python - 列表中的运算符在打印时仍显示引号(Python 3.1)