1

考虑以下代码:

// Only prefix operators
struct prefix
{
    prefix& operator--() { return *this; }
    prefix& operator++() { return *this; }
};

// Try to represent prefix & postfix operators via inheritance
struct any : prefix
{
    any operator--(int) { return any(); }
    any operator++(int) { return any(); }
};

int main() {

    any a;

    a--;
    a++;
    --a; // no match for ‘operator--’ (operand type is ‘any’)
    ++a; // no match for ‘operator++’ (operand type is ‘any’)

    return 0;
}

我试图创建类的层次结构。基类,仅实现前缀递增/递减运算符。并在派生类中添加后缀版本。

但是,编译器找不到派生类对象的前缀操作。

为什么会发生这种情况,为什么不继承前缀运算符?

4

1 回答 1

4

使用以下内容导入隐藏的operator--和类:operator++prefix

struct any : prefix
{
    using prefix::operator--;
    using prefix::operator++;
    any operator--(int) { return any(); }
    any operator++(int) { return any(); }
};

Live demo

这可能是一个糟糕的想法,但至少它会编译。

于 2014-07-02T14:06:39.633 回答