指针解除引用运算符((*)vs - >)

Fal*_*rri 34 c++ pointers operator-overloading

这样做有一般的区别吗?

(*ptr).method()
Run Code Online (Sandbox Code Playgroud)

VS

ptr->method()
Run Code Online (Sandbox Code Playgroud)

我在另一个问题的评论中看到了这个问题,我想在这里问一下.虽然我记得几乎C++中的每个操作符都可以重载,所以我想答案将取决于.但总的来说,做一个与另一个之间有区别吗?

Che*_*Alf 62

作为"jamesdlin"已经指出的那样,*->运算符可以重载类的类型.

然后两个表达式(*ptr).method(),并ptr->method()可以有不同的效果.

但是,对于内置运算符,两个表达式是等价的.

->当你跟踪指针链时,操作符会更方便,因为它.具有更高的优先级*,因此需要很多不可忽略的括号.

考虑:

pBook->author->snailMail->zip
Run Code Online (Sandbox Code Playgroud)

(*(*(*pBook).author).snailMail).zip
Run Code Online (Sandbox Code Playgroud)


jam*_*lin 12

对于原始指针类型,它们是等价的.

是的,对于一般类型,答案确实是"它依赖",因为类可能会超载operator*operator->具有不同的行为.

  • 如果一个班级做到这一点,当然,你有权在表面上打击作者......很难. (43认同)

wro*_*ame 10

是.ptr->method()比两个字符短(*ptr).method().

它也更漂亮.


Kir*_*sky 8

C++标准5.2.5/3:

如果E1具有"指向类X的指针"类型,则表达式E1-> E2被转换为等效形式(*(E1)).E2;

对于非指针值,运算符可能会过载.


Pra*_*rav 5

但是,总的来说,一个做与另一个做有区别吗?

没有!(除非->并且*显式超载以执行不同的功能)

ptr->method()(*ptr).method()等价。