当前位置:  开发笔记 > 编程语言 > 正文

我可以使用什么代替箭头操作符,` - >`?

如何解决《我可以使用什么代替箭头操作符,`->`?》经验,为你挑选了5个好方法。

什么是箭头operator(->)的同义词?



1> Greg Hewgill..:

以下两个表达式是等效的:

a->b

(*a).b

(受操作员超载影响,正如Konrad所提到的那样,但那是不寻常的).


重载问题比您想象的要少得多.不久前,STL实现者没有为某些迭代器类型重载` - >`运算符,因此你*使用**.`.许多库不一致地定义它们.当您使用模板并且不知道精确类型时,变得非常烦人.

2> Konrad Rudol..:

a->b通常是一个同义词(*a).b.这里的括号是必要的,因为运算符的绑定强度*.: *a.b不会起作用,因为.绑定更强并且首先执行.这相当于*(a.b).

当心超载,但:由于两个->*可以被重载,它们的含义可以大大不同.



3> P-A..:

C++语言将箭头operator(->)定义为取消引用指针的同义词,然后.在该地址上使用-operator.

例如:

如果你有一个对象anObject,和一个指针,aPointer:

SomeClass anObject = new SomeClass();
SomeClass *aPointer = &anObject;

为了能够使用其中一个对象方法,您可以取消引用指针并对该地址执行方法调用:

(*aPointer).method();

哪个可以用箭头操作符写:

aPointer->method();

箭头操作符存在的主要原因是它缩短了一个非常常见的任务的类型,并且很容易忘记指针解除引用周围的括号.如果忘记括号,.-运算符将绑定更强大的*-operator并使我们的示例执行为:

*(aPointer.method()); // Not our intention!

其他一些答案也提到了C++运算符都可以重载并且它并不常见.


`new SomeClass()`返回一个指针(`SomeClass*`),而不是`SomeClass`对象.然后你开始声明`anObject`和`aPointer`,但之后你正在使用`p`.

4> Johannes Sch..:

C++ 0x中,操作员得到一个第二含义,指示功能或lambda表达式的返回类型

auto f() -> int; // "->" means "returns ..."


@Martin大多数人使用"运算符"这个词来表示许多不直接用于计算值的东西.喜欢"::"("范围运算符").我完全不知道标准的观点是什么.在抽象意义上,可以将" - >"视为将函数序列(参数)映射到返回类型的函数运算符,如haskell运算符,也写为" - >".
我投降!:-P
@ JohannesSchaub-litb:`::`实际上是一个运算符,如`.`或` - >`,在标准中称为"范围解析运算符".

5> Tetha..:

我大多从右到左阅读它并打电话给"in"

foo->bar->baz = qux->croak

变为:

"在foo酒吧里的巴兹变成了qux中的呱呱叫."

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有