Gre*_*ill 134
以下两个表达式是等效的:
a->b
(*a).b
Run Code Online (Sandbox Code Playgroud)
(受操作员超载影响,正如Konrad所提到的那样,但那是不寻常的).
Kon*_*lph 69
a->b通常是一个同义词(*a).b.这里的括号是必要的,因为运算符的绑定强度*和.: *a.b不会起作用,因为.绑定更强并且首先执行.这相当于*(a.b).
当心超载,但:由于两个->和*可以被重载,它们的含义可以大大不同.
P-A*_*P-A 44
C++语言将箭头operator(->)定义为取消引用指针的同义词,然后.在该地址上使用-operator.
例如:
如果你有一个对象anObject,和一个指针,aPointer:
SomeClass anObject = new SomeClass();
SomeClass *aPointer = &anObject;
Run Code Online (Sandbox Code Playgroud)
为了能够使用其中一个对象方法,您可以取消引用指针并对该地址执行方法调用:
(*aPointer).method();
Run Code Online (Sandbox Code Playgroud)
哪个可以用箭头操作符写:
aPointer->method();
Run Code Online (Sandbox Code Playgroud)
箭头操作符存在的主要原因是它缩短了一个非常常见的任务的类型,并且很容易忘记指针解除引用周围的括号.如果忘记括号,.-运算符将绑定更强大的*-operator并使我们的示例执行为:
*(aPointer.method()); // Not our intention!
Run Code Online (Sandbox Code Playgroud)
其他一些答案也提到了C++运算符都可以重载并且它并不常见.
Joh*_*itb 16
C++ 0x中,操作员得到一个第二含义,指示功能或lambda表达式的返回类型
auto f() -> int; // "->" means "returns ..."
Run Code Online (Sandbox Code Playgroud)
Tet*_*tha 13
我大多从右到左阅读它并打电话给"in"
foo->bar->baz = qux->croak
Run Code Online (Sandbox Code Playgroud)
变为:
"在foo酒吧里的巴兹变成了qux中的呱呱叫."