如何调用postfix operator ++?

时间:2016-03-13 04:57:58

标签: c++ c++11

假设我有以下代码:

struct ReverseIterator : public Iterator {
ReverseIterator& operator++() {Iterator::operator--();}
ReverseIterator& operator--() {Iterator::operator++();}

ReverseIterator operator++(int) { /* ... */ }
ReverseIterator operator--(int) { /* ... */ }
}

如何调用基类,迭代器,后缀增量/减量运算符?我理解为了区分修复前和修复后,正在传递临时虚拟变量。如果是这种情况,我不能只调用Iteartor::operator++(1);正弦1是一个整数吗?

2 个答案:

答案 0 :(得分:5)

你可以,但你不应该这样做。 Postfix inc / dec运算符通常必须通过调用相应的前缀形式来实现。此外,基类运算符返回的值与类型不兼容,并且作为派生类运算符的结果将返回错误。

struct ReverseIterator : public Iterator {
ReverseIterator& operator++() {Iterator::operator--();}
ReverseIterator& operator--() {Iterator::operator++();}

ReverseIterator operator++(int) 
{
    ReverseIterator result = *this;
    ++(*this);
    return result;
}
ReverseIterator operator--(int) 
{
    ReverseIterator result = *this;
    --(*this);
    return result;
}
}

我想你应该阅读这些问题: How to implement an STL-style iterator and avoid common pitfalls?

How can I implement various iterator categories in an elegant and efficient way?

答案 1 :(得分:3)

是的,您可以以正常方式使用这些运算符,如++iterator(前缀)和iterator++(后缀),但您可以直接调用它们,传递任何参数。如果您实际上并未在定义中的任何位置使用形式参数,则可以传递任何内容,通常为0

有时,参数用于递增某个值,如下所示:

i.operator++( 25 ); // Increment by 25.

但我不会称之为良好的编程风格。这些操作员不应该这样做,而且令人困惑。

Source.