ptr->你好();/*VERSUS*/(*ptr).hello();

Joe*_*oey 12 c++ pointers operators dereference

我正在学习C++指针,->操作员对我来说似乎很奇怪.而不是 ptr->hello();一个人可以写,(*ptr).hello();因为它似乎也有效,所以我认为前者只是一种更方便的方式.

是这样的情况还是有什么不同?

dsi*_*cha 35

- >运算符只是语法糖因为(*ptr).hello()是要输入的PITA.就ASM级别生成的指令而言,没有区别.实际上,在某些语言中(D会想到),编译器会根据类型计算出所有内容.如果你这样做ptr.hello(),它只是工作,因为编译器知道ptr是一个指针,并且没有hello()属性,所以你必须这样做(*ptr).hello().


Max*_*ert 15

其他人已经回答了关于内置指针的问题.关于类,可以重载operator - >(),operator&()和operator*(),但不能重载operator.().

这意味着对象可能会根据您调用的语法采取不同的行为.

  • 当然,任何以这种方式使这些操作行为不同的人都应该被枪杀. (4认同)

Col*_*lin 8

当你必须链接函数调用时,可读性方面的主要优点是:

ptr->getAnotherPtr()->getAThirdPtr()->print()
Run Code Online (Sandbox Code Playgroud)

我甚至不打算用*运算符来做这件事.


jjn*_*guy 7

拥有'->'操作员的唯一原因是使其更方便并保存错误,如:

*ptr.hello();
Run Code Online (Sandbox Code Playgroud)

因为很容易忘记括号.


And*_*kov 5

它们生成相同的机器代码,但对我来说,ptr-> arg()比(*ptr).arg()更容易阅读.