我正在学习C++指针,->
操作员对我来说似乎很奇怪.而不是
ptr->hello();
一个人可以写,(*ptr).hello();
因为它似乎也有效,所以我认为前者只是一种更方便的方式.
是这样的情况还是有什么不同?
- >运算符只是语法糖因为(*ptr).hello()
是要输入的PITA.就ASM级别生成的指令而言,没有区别.实际上,在某些语言中(D会想到),编译器会根据类型计算出所有内容.如果你这样做ptr.hello()
,它只是工作,因为编译器知道ptr是一个指针,并且没有hello()属性,所以你必须这样做(*ptr).hello()
.
其他人已经回答了关于内置指针的问题.关于类,可以重载operator - >(),operator&()和operator*(),但不能重载operator.().
这意味着对象可能会根据您调用的语法采取不同的行为.
当你必须链接函数调用时,可读性方面的主要优点是:
ptr->getAnotherPtr()->getAThirdPtr()->print()
我甚至不打算用*运算符来做这件事.
拥有'->'
操作员的唯一原因是使其更方便并保存错误,如:
*ptr.hello();
因为很容易忘记括号.
它们生成相同的机器代码,但对我来说,ptr-> arg()比(*ptr).arg()更容易阅读.