c++ - 为什么要按照前置增量来实现后置增量呢?

标签 c++ increment

Herb Sutter 建议像这样实现后增量:

T T::operator++(int)() {
    auto old = *this; // remember our original value
    ++*this;          // always implement postincr in terms of preincr
    return old;       // return our original value
}

根据指南:

Guideline: For consistency, always implement postincrement in terms of preincrement, otherwise your users will get surprising (and often unpleasant) results.

这些令人惊讶(通常令人不快)的结果是什么?

最佳答案

这确保两个运算符在修改对象的方式上表现相同,只是返回值不同。如果您分别实现这两个运算符,并决定修改其中一个,您可能会忘记对另一个进行等效更改。如果您根据另一个实现一个,则只需在一个地方进行更改。 preincrement 成为更基本的方法是有道理的,因为 postincrement 的唯一区别是先临时保存旧值。

当他说您的用户会得到令人惊讶的结果时,他可能言过其实了。他可能应该说可能会得到令人惊讶的结果,因为它只有在你搞砸的情况下才会发生。

关于c++ - 为什么要按照前置增量来实现后置增量呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26308601/

相关文章:

c++ - 访问共享内存中的数据 C++ POSIX

c++ - 在 C++ 中使用 std 命名空间的完全限定名称

带有增量运算符的java循环示例

c - C 中 i++ 和 (i)++ 的区别

php - php中的一个递增函数出错

c++ - 在 C++ 中有效地读取大型 txt

c++ - 在分配大型数组期间增加内存

c++ - 带有未声明标识符错误的循环链表

C:可变增量不起作用,石头,布,剪刀

JavaScript : setInterval in a while?