2013-02-01 145 views

回答

8

如果ptr是一個正常的指針,那麼兩者是等價的。 ptr->f是取消引用指針(相當於(*ptr))並訪問解除引用的對象的成員(相當於.f)的捷徑。

如果ptr是一個重載operator->operator*的類,那麼它們將分別調用不同的運算符重載,因此可能會有不同的行爲。

8

完全沒有區別。 (*ptr).f();是這樣做的醜陋方式。

其實,如果ptr是一些智能指針及其operator*operator->超載,並執行一些副作用,那麼你可能有這個問題。但是這真的是非常糟糕的事情。這是邪惡的#define true false

+0

+1,提及您應該(幾乎)從不以違反最小驚喜原則的方式定義運營商。 – us2012

0

除了文體/打字的差異,沒有區別。當使用指向結構或類的指針時,它與(*ptr).member = 7;ptr->member = 7;完全相同。

相關問題