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

发布于 2024-11-25 17:30:43 字数 225 浏览 0 评论 0原文

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

如果改为 Foo foo 会有什么不同吗?

也许像 foo.operator->(bar) 之类的东西?

If I have a Foo *foo, I can say foo->bar(). Is it possible to call the operator->() function manually? And if so, how would I pass it bar()?

Does it make a difference if it is Foo foo instead?

Maybe something like foo.operator->(bar)?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

鹊巢 2024-12-02 17:30:43

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

如果您的重载 operator -> 函数“正确”实现,即它返回也支持运算符 -> 的内容,那么使用“手册”就没有多大意义了语法,因为它与“非手动”做同样的事情。

您需要“手动”语法的唯一情况是,重载的 operator -> 的实现返回不支持 -> 的其他应用程序的内容。例如,int 值。

Yes, you can. With overloaded -> the foo->bar() expression is interpreted by the compiler as foo.operator->()->bar(). And this is exactly how you can call it "manually": foo.operator->()->bar().

If your overloaded operator -> function is implemented "properly", i.e. it returns something that also supports operator -> then there's not much point in using the "manual" syntax, since it is doing the same thing as the "non-manual" one.

The only case you'd need the "manual" syntax is when your implementation of overloaded operator -> returns something that does not support another application of ->. An int value, for example.

躲猫猫 2024-12-02 17:30:43

是的。

(*foo)->bar();               //syntax one   (implicit)
(*foo)->operaror->()->bar(); //syntax two   (explicit)
 foo->operator->()->bar();   //syntax three (explicit)

Yes.

(*foo)->bar();               //syntax one   (implicit)
(*foo)->operaror->()->bar(); //syntax two   (explicit)
 foo->operator->()->bar();   //syntax three (explicit)
冷血 2024-12-02 17:30:43

是否可以手动调用operator->()函数?

没有运算符->()函数,因为示例中的foo是一个指针。对于指针,-> 的行为由语言定义。

如果类型 Foo 有一个 operator->() 函数,并且您定义了 Foo *foo,您可以这样做来调用operator->() 函数:

(*foo)->...;

或者您可以使用直接调用语法:

(*foo)operator->()->...;

Is it possible to call the operator->() function manually?

There is no operator->() function because foo in your example is a pointer. For pointers, the behavior of -> is defined by the language.

If the type Foo has an operator->() function, and you have Foo *foo defined, you can do this to call the operator->() function:

(*foo)->...;

Or you can use the direct call syntax:

(*foo)operator->()->...;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文