如果重载解引用运算符(operator*
),成员选择运算符(operator->
)是否使用重载运算符,或者是否也需要重载它?
您需要单独重载箭头运算符。更一般地说,即使C++中的相关运算符之间有一个很好的映射,如果重载一个运算符,则不会"免费"重载其余运算符,必须自己实现它们。
也就是说,在取消引用方面很容易实现箭头:
T* Class::operator -> () const {
return &**this;
}
这是通过取消引用this
来获得对接收器对象的引用,然后取消引用以调用operator *
,然后获取返回引用的地址来获得指向箭头应该应用到的对象的指针来实现的
您可能需要查看Boost.Operators库,它可以从一小部分基本操作中自动定义许多逻辑相关的运算符。
希望有帮助!
您基本上可以实现一个重载的去引用运算符,但要实现这一点,您必须两次遵守它,重载运算符才能发挥作用!
5.2.5"如果E1
的类型为"指向类X
的指针",则表达式E1->E2
将转换为等效形式(*(E1)).E2
"。问题是,在您的情况下,E1
是而不是指针。