次のコードを検討してください。
// 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;
}
クラスの階層を作成しようとしました。プレフィックスのインクリメント/デクリメント演算子を実現するためだけの基本クラス。そして、派生クラスに後置バージョンを追加します。
ただし、コンパイラは派生クラス オブジェクトのプレフィックス操作を見つけることができません。
なぜこれが起こっているのですか、なぜ前置演算子が継承されないのですか?