可能重複:
C++ - Difference between (*). and ->?(* ptr).f()和ptr-> f()之間的區別是什麼?
是什麼這之間的區別:
(*ptr).f();
這:
ptr->f();
在c++其中ptr是一個指向C++類的指針,它有一個函數f
?
可能重複:
C++ - Difference between (*). and ->?(* ptr).f()和ptr-> f()之間的區別是什麼?
是什麼這之間的區別:
(*ptr).f();
這:
ptr->f();
在c++其中ptr是一個指向C++類的指針,它有一個函數f
?
如果ptr
是一個正常的指針,那麼兩者是等價的。 ptr->f
是取消引用指針(相當於(*ptr)
)並訪問解除引用的對象的成員(相當於.f
)的捷徑。
如果ptr
是一個重載operator->
和operator*
的類,那麼它們將分別調用不同的運算符重載,因此可能會有不同的行爲。
完全沒有區別。 (*ptr).f();
是這樣做的醜陋方式。
其實,如果ptr
是一些智能指針及其operator*
和operator->
超載,並執行一些副作用,那麼你可能有這個問題。但是這真的是非常糟糕的事情。這是邪惡的#define true false
+1,提及您應該(幾乎)從不以違反最小驚喜原則的方式定義運營商。 – us2012
除了文體/打字的差異,沒有區別。當使用指向結構或類的指針時,它與(*ptr).member = 7;
與ptr->member = 7;
完全相同。
無。 –
唯一的區別是編譯器會將'ptr-> f()'轉換爲'(* ptr).f()'(又名,它只是一個快捷方式)。 – Xeo