请考虑以下代码:
// 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;
}
我试图创建一个类的层次结构。基类,只实现前缀增量/减量运算符。并在派生类中添加后缀版本。
但是,编译器无法找到派生类对象的前缀操作。
为什么会发生这种情况,为什么不继承前缀运算符?
答案 0 :(得分:4)
使用以下内容导入operator--
类的隐藏operator++
和prefix
:
struct any : prefix
{
using prefix::operator--;
using prefix::operator++;
any operator--(int) { return any(); }
any operator++(int) { return any(); }
};
这可能是一个糟糕的主意,但至少它会编译。