我可以用什么来代替箭头运算符,` – >`?

什么是箭头运算符( -> )的同义词?

以下两个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 

变为:

“在酒吧里的巴兹变得呱呱叫。”