你能手动调用箭头( - >)操作符吗?

Cor*_*ein 2 c++ operators

如果我有Foo *foo,我可以说foo->bar().是否可以operator->()手动调用该功能?如果是这样,我将如何通过它bar()

Foo foo相反,它会有所作为吗?

也许是这样的foo.operator->(bar)

AnT*_*AnT 7

是的你可以.在重载时->,foo->bar()表达式被编译器解释为foo.operator->()->bar().这正是你可以"手动"调用它的方式:foo.operator->()->bar().

如果你的重载operator ->函数是"正确"实现的,即它返回一些也支持operator的东西,->那么使用"manual"语法并没有多大意义,因为它与"非手动"语法做同样的事情.

你需要"手动"语法的唯一情况是当你的重载实现operator ->返回不支持另一个应用程序的东西时->.int例如,一个值.

  • `operator->()` 将被隐式调用,在链中,根据需要多次调用,以获得指针类型的东西,此时 `->` 的内置逻辑(取消引用指针和访问成员)开始。(这不能被覆盖,因为你不能重载指针类型的运算符。)当然,如果链以既不是指针也没有重载的类型结束(例如` int`),然后会出现编译器错误。 (2认同)