共用方式為


名稱和限定名稱

搭配二進位範圍解析運算子 (::) 使用的名稱亦稱為「限定名稱」(Qualified Name)。在二進位範圍解析運算子後面指定的名稱,必須是運算子左方所指定類別的成員,或是其基底類別的成員。

成員選擇運算子 (.–>) 後面指定的名稱,必須是運算子左方所指定物件之類別類型的成員,或是其基底類別的成員。 假設成員選擇運算子 (–>) 的左方是類別物件,且該類別定義的多載成員選擇運算子 (–>) 會判斷值為其他類別類型的指標,則 –> 右方指定的名稱也可以是另一個類別類型的物件 (這項佈建將在類別成員存取中詳細討論)。

編譯器會依照下列順序搜尋名稱,並且在找到名稱時停止:

  1. 如果名稱是在函式內使用,則為目前區塊範圍,否則為全域範圍。

  2. 向外至每個封閉區塊範圍,包括最外層的函式範圍 (包括函式引數)。

  3. 如果名稱是在成員函式內使用,則會在類別的範圍內搜尋名稱。

  4. 在類別的基底類別內搜尋名稱。

  5. 在封閉巢狀類別範圍 (如果有的話) 及其基底內搜尋。 搜尋會繼續,直到搜尋至最外層封閉類別範圍為止。

  6. 在全域範圍內搜尋。

不過,您可以依照下述方式修改這個搜尋順序:

  1. 前面加上 :: 的名稱會強制從全域範圍開始搜尋。

  2. 前面加上 class、struct 和 union 關鍵字的名稱會強制編譯器僅搜尋 class、struct 或 union 名稱。

  3. 範圍解析運算子 (::) 左邊的名稱只能是 class、struct、namespaceunion 名稱。

如果名稱參考非靜態成員,但是在靜態成員函式中使用,則會產生錯誤訊息。 同樣地,如果名稱參考封閉式類別中的任何非靜態成員,也會產生錯誤訊息,因為已封閉的類別沒有封入類別 this 指標。

請參閱

參考

範圍規則摘要