C++ 中的箭頭運算子“->”是什麼?
點運算子和箭頭運算子都是在 C++ 中用於訪問類或結構的成員的。它們只是在不同的場景中使用。在 C++ 中,宣告為類、結構或聯合的型別被認為是“類型別”。因此,以下內容指代全部三個型別。
a.b 僅在 b 是物件(或對物件的引用)a 的成員時使用。因此,對於 a.b,a 總是作為某個類的實際物件(或對物件的引用)。
a->b 本質上是 (*a).b 的速記符號,也就是說,如果 a 是指向物件的指標,則 a->b 是訪問 a 所指向的物件的屬性 b。
請注意,點運算子不能過載,但 -> 可以過載,所以我們可以定義自己的函式 (operator->()),該函式應在使用此運算子時被呼叫。因此,如果 a 是過載 operator-> 的某個類的物件(此類常見的型別是智慧指標和迭代器),那麼含義則由該類的設計者決定。
語義上,引用是物件的別名,我應該也把“或指向指標的引用”加進去。不過,我考慮了一下,這麼做弊大於利,因為很少用到指向指標的引用 (T*&)。
示例程式碼
#include<iostream> class A { public: int b; A() { b = 5; } }; int main() { A a = A(); A* x = &a; std::cout << "a.b = " << a.b << "\n"; std::cout << "x->b = " << x->b << "\n"; return 0; }
輸出
5 5
廣告