[英]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.