如果我有Foo *foo
,我可以说foo->bar()
。是否可以手动调用operator->()
功能?如果是这样,我将如何传递bar()
?
如果改为Foo foo
会不会产生影响?
也许像foo.operator->(bar)
?
答案 0 :(得分:7)
是的,你可以。在重载->
时,foo->bar()
表达式被编译器解释为foo.operator->()->bar()
。这正是您可以“手动”调用它的方式:foo.operator->()->bar()
。
如果你的重载operator ->
函数被“正确”实现,即它返回一些也支持operator ->
的东西,那么使用“manual”语法并没有多大意义,因为它正在做同样的事情作为“非手动”的东西。
您需要“手动”语法的唯一情况是,重载operator ->
的实现会返回不支持->
的其他应用程序的内容。例如,int
值。
答案 1 :(得分:2)
是否可以手动调用operator->()函数?
没有operator->()函数,因为示例中的foo
是指针。对于指针,->
的行为由语言定义。
如果Foo
类型具有operator->()
功能,并且您已定义Foo *foo
,则可以执行此操作来调用operator->()
函数:
(*foo)->...;
或者您可以使用直接调用语法:
(*foo)operator->()->...;
答案 2 :(得分:2)
是
(*foo)->bar(); //syntax one (implicit)
(*foo)->operaror->()->bar(); //syntax two (explicit)
foo->operator->()->bar(); //syntax three (explicit)