为了账号安全,请及时绑定邮箱和手机立即绑定

重载成员访问运算符->,。*(C ++)

重载成员访问运算符->,。*(C ++)

C++
慕盖茨4494581 2019-10-05 13:33:05
据我所知大多数运算符重载,与成员访问运营商外->,.*,->*等。特别是,什么传递给这些运算符,应该返回什么?操作员功能(例如operator->(...))如何知道所引用的成员?能知道吗 它甚至需要知道吗?最后,是否需要考虑任何常量注意事项?例如,当重载类似的东西时operator[],通常您将需要const版本和非const版本。成员访问运算符是否需要const和非const版本?
查看完整描述

3 回答

?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

运算符->很特殊。


“它具有附加的非典型约束:它必须返回还具有指针取消引用操作符的对象(或对对象的引用),或者必须返回可以用于选择指针取消引用操作符箭头所指向的指针。 ” 布鲁斯·埃克尔(Bruce Eckel):思考CPP第一卷:操作员->


为了方便起见,提供了额外的功能,因此您不必致电


a->->func();

您可以简单地执行以下操作:


a->func();

这使得运算符->与其他运算符重载不同。


查看完整回答
反对 回复 2019-10-05
?
慕少森

TA贡献2019条经验 获得超9个赞

您不能过载成员访问权限.(即,第二部分->)。但是,您可以重载一元解引用运算符*(即,该->函数的第一部分)。

C ++ ->运算符基本上是两个步骤的结合,如果您认为x->y等效于,则很清楚(*x).y(*x)x属于类的实例时,C ++允许您自定义如何处理零件。

->重载的语义有些奇怪,因为C ++允许您返回一个常规指针(它将用于查找指向的对象),或者如果该类还提供了一个->运算符,则可以返回另一个类的实例。在第二种情况下,从该新实例继续搜索取消引用的对象。


查看完整回答
反对 回复 2019-10-05
  • 3 回答
  • 0 关注
  • 578 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信