你可以手动调用箭头( - >)运算符函数吗?

时间:2011-07-20 20:44:20

标签: c++ operators

如果我有Foo *foo,我可以说foo->bar()。是否可以手动调用operator->()功能?如果是这样,我将如何传递bar()

如果改为Foo foo会不会产生影响?

也许像foo.operator->(bar)

3 个答案:

答案 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)