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 に答える