为了账号安全,请及时绑定邮箱和手机立即绑定

我可以使用什么代替箭头运算符`->`?

我可以使用什么代替箭头运算符`->`?

C++
函数式编程 2019-10-05 14:33:24
箭头运算符(->)的同义词是什么?
查看完整描述

4 回答

?
慕侠2389804

TA贡献1719条经验 获得超6个赞

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


a->b


(*a).b

(如Konrad所述,操作符会受到重载,但这是不寻常的)。


查看完整回答
反对 回复 2019-10-05
?
胡子哥哥

TA贡献1825条经验 获得超6个赞

a->b通常是的同义词(*a).b。由于运算符的绑定强度,此处的括号是必需的,*并且.:: *a.b无效,因为.绑定更牢固并首先执行。因此,这等效于*(a.b)。


但是,请提防重载:由于->和*都可以重载,因此它们的含义可能会大不相同。


查看完整回答
反对 回复 2019-10-05
?
Qyouu

TA贡献1786条经验 获得超11个赞

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


例如:


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


SomeClass anObject = new SomeClass();

SomeClass *aPointer = &anObject;

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


(*aPointer).method();

可以使用箭头运算符编写:


aPointer->method();

存在箭头运算符的主要原因是,它缩短了一个非常常见的任务的键入时间,并且还很容易忘记指针取消引用前后的括号。如果您忘记了括号,则.-operator的绑定会更强,然后* -operator并使我们的示例执行为:


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

其他一些答案也提到C ++运算符可能是重载的,而且这种情况并不常见。


查看完整回答
反对 回复 2019-10-05
?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

在C ++ 0x中,运算符具有第二个含义,表示函数或lambda表达式的返回类型


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


查看完整回答
反对 回复 2019-10-05
  • 4 回答
  • 0 关注
  • 619 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信