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