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

更新於: 30-Jul-2019

431 次瀏覽

開始你的職業生涯

完成課程後獲得認證

開始
廣告