据我所知大多数运算符重载,与成员访问运营商外->,.*,->*等。特别是,什么传递给这些运算符,应该返回什么?操作员功能(例如operator->(...))如何知道所引用的成员?能知道吗 它甚至需要知道吗?最后,是否需要考虑任何常量注意事项?例如,当重载类似的东西时operator[],通常您将需要const版本和非const版本。成员访问运算符是否需要const和非const版本?
3 回答
至尊宝的传说
TA贡献1789条经验 获得超10个赞
运算符->很特殊。
“它具有附加的非典型约束:它必须返回还具有指针取消引用操作符的对象(或对对象的引用),或者必须返回可以用于选择指针取消引用操作符箭头所指向的指针。 ” 布鲁斯·埃克尔(Bruce Eckel):思考CPP第一卷:操作员->
为了方便起见,提供了额外的功能,因此您不必致电
a->->func();
您可以简单地执行以下操作:
a->func();
这使得运算符->与其他运算符重载不同。
慕少森
TA贡献2019条经验 获得超9个赞
您不能过载成员访问权限.
(即,第二部分->
)。但是,您可以重载一元解引用运算符*
(即,该->
函数的第一部分)。
C ++ ->
运算符基本上是两个步骤的结合,如果您认为x->y
等效于,则很清楚(*x).y
。(*x)
当x
属于类的实例时,C ++允许您自定义如何处理零件。
->
重载的语义有些奇怪,因为C ++允许您返回一个常规指针(它将用于查找指向的对象),或者如果该类还提供了一个->
运算符,则可以返回另一个类的实例。在第二种情况下,从该新实例继续搜索取消引用的对象。
- 3 回答
- 0 关注
- 578 浏览
添加回答
举报
0/150
提交
取消