繁体   English   中英

如何调用后缀运算符++?

[英]How to call postfix operator++?

假设我有以下代码:

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

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

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

可以,但不要这样做。 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;
}
}

我想您应该阅读以下问题: 如何实现STL样式的迭代器并避免常见的陷阱?

如何以一种优雅而有效的方式实现各种迭代器类别?

是的,您可以按常规方式使用这些运算符,例如++iterator (前缀)和iterator++ (postfix),但是您可以直接调用它们,并传递任何参数。 如果您实际上没有在定义内的任何地方使用形式参数,则可以传递任何东西,通常为0

有时,该参数用于增加某个值,例如:

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

但是我不会称其为良好的编程风格。 这些运算符不应该这样做,这很令人困惑。

资源。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM