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

据我所知大多数运算符重载,与成员访问运营商外->.*->*等。

特别是,什么传递给这些运算符,应该返回什么?

操作员功能(例如operator->(...))如何知道所引用的成员?能知道吗 它甚至需要知道吗?

最后,是否需要考虑任何常量注意事项?例如,当重载类似的东西时operator[],通常您将需要const版本和非const版本。成员访问运算符是否需要const和非const版本?


慕盖茨4494581
浏览 579回答 3
3回答

至尊宝的传说

运算符->很特殊。“它具有附加的非典型约束:它必须返回还具有指针取消引用操作符的对象(或对对象的引用),或者必须返回可以用于选择指针取消引用操作符箭头所指向的指针。 ” 布鲁斯·埃克尔(Bruce Eckel):思考CPP第一卷:操作员->为了方便起见,提供了额外的功能,因此您不必致电a->->func();您可以简单地执行以下操作:a->func();这使得运算符->与其他运算符重载不同。

慕少森

您不能过载成员访问权限.(即,第二部分->)。但是,您可以重载一元解引用运算符*(即,该->函数的第一部分)。C ++ ->运算符基本上是两个步骤的结合,如果您认为x->y等效于,则很清楚(*x).y。(*x)当x属于类的实例时,C ++允许您自定义如何处理零件。->重载的语义有些奇怪,因为C ++允许您返回一个常规指针(它将用于查找指向的对象),或者如果该类还提供了一个->运算符,则可以返回另一个类的实例。在第二种情况下,从该新实例继续搜索取消引用的对象。
打开App,查看更多内容
随时随地看视频慕课网APP