请问在C++中"->"是什么意思?
如果有例子的话,会更加易懂。
谢谢。
请问在C++中"->"是什么意思?
如果有例子的话,会更加易懂。
谢谢。
这是一种解除引用并进行属性访问(或方法调用)的快捷方式。
在代码中,以下是一些等效的示例:
Foo *foo;
// field access
foo->bar = 10;
(*foo).bar = 10;
// method invocation
foo->baz();
(*foo).baz();
当您有一长串这样的序列时,这将特别方便。例如,如果您有一个单链表数据结构,其中每个元素都有指向下一个元素的指针,则以下是查找第五个元素的等效方式(但其中一种看起来更好):
linked_list *head, *fifth;
fifth = head->next->next->next->next;
fifth = (*(*(*(*head).next).next).next).next;
rd
)的指针,它获取托管资源的服务器的友好名称:rd->resource->GetServer()->GetFriendlyName()
。GetServer
函数返回托管资源的服务器的指针。resource
是资源描述符结构的成员。想象一下如果使用 (*).
的形式会有多丑陋。 - David Schwartz*
和 ->
都可以被重载,因此 (*a).b
和 a->b
虽然通常相同,但除非 a
是指针,否则不能保证等效。 - PeterTa->b
是一种更好的方式来写作 (*a).b
。你可以将 a->b
理解为“访问对象 a
指向的b
成员/函数”。你可以大声朗读它(或者自己想想),作为“a
成员访问 b
”。a
指向的”。 - David Schwartza
成员访问b
"。如果a
是一个裸指针,那么这是不可能的,因为指针实际上没有成员。应该是"a
解引用,然后成员访问b
"。而且,如果不涉及指针,"解引用"也没有意义。 - Nicol Bolas->
运算符通常用于指针(或类似指针的对象)作为LHS,结构体或类成员作为RHS(lhs->rhs
)。它通常等同于(*lhs).rhs
,这是访问成员的另一种方式。如果您忽略德米特定律并需要编写lhs->mid->rhs
,则更方便(通常比(*(*lhs).mid).rhs
更容易阅读)。->
运算符,智能指针经常这样做。据我所知,您无法重载.
运算符。。
不能被重载(连同.*
,::
和'?:
)。 - Michael Burr