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