我可以用什么来代替箭头运算符,` – >`?
什么是箭头运算符( ->
)的同义词?
以下两个expression式是等价的:
a->b (*a).b
(如Konrad提到的那样受操作员负担过重,但这是不寻常的)。
a->b
通常是(*a).b
的同义词。 这里的括号是必要的,因为操作符*
和绑定的强度.
: *ab
不会工作,因为.
绑定更强大,并首先执行。 这相当于*(ab)
。
但是,要小心超载,因为->
和*
都可以超载,所以它们的含义可以大相径庭。
C ++语言将箭头运算符( ->
)定义为取消引用指针的同义词,然后使用.
那个地址上的操作员。
例如:
如果你有一个对象, anObject
和一个指针, aPointer
:
SomeClass anObject = new SomeClass(); SomeClass *aPointer = &anObject;
为了能够使用其中一个对象方法,您取消引用该指针并对该地址执行方法调用:
(*aPointer).method();
可以用箭头符号来写:
aPointer->method();
箭头运算符存在的主要原因是它缩短了一个非常常见的任务的键入,并且还很容易忘记指针的解引用周围的括号。 如果你忘记了括号,.-运算符将绑定更强的*运算符,并使我们的例子执行如下:
*(aPointer.method()); // Not our intention!
其他一些答案也提到了C ++操作符可能会超负荷,而且这种操作并不常见。
在C ++ 0x中,运算符获得第二个含义,指示函数或lambdaexpression式的返回types
auto f() -> int; // "->" means "returns ..."
我大多数是从右到左读“打”
foo->bar->baz = qux->croak
变为:
“在酒吧里的巴兹变得呱呱叫。”