首頁  >  文章  >  後端開發  >  C 中內聯友元函數的作用域實際上是如何運作的?

C 中內聯友元函數的作用域實際上是如何運作的?

Barbara Streisand
Barbara Streisand原創
2024-11-25 02:13:21566瀏覽

How Does the Scope of an Inline Friend Function in C   Actually Work?

內聯友元函數的範圍

在C 上下文中,內聯友元函數的詞法作用域擴展到它所定義的類。然而,確定其實際範圍需要進一步探索。

ISO C 標準指定,當在命名空間範圍的類別中宣告內聯友元函數時,它會在最近的封閉命名空間範圍中命名一個函數。如果函數尚未聲明,則友元聲明本身不會使其在該範圍內可見以進行非限定查找。

相反,友元聲明允許透過參數相關的查找(ADL )。這表示只要函數參數的類型與包含函數宣告的命名空間範圍匹配,就可以使用其非限定名稱來呼叫友元函數。

因此,在類別中宣告的內聯友元函數只能透過以下方式呼叫: ADL,除非它們隨後在其封閉的命名空間範圍中宣告或定義。這確保了只有當參數允許明確的名稱解析時才能存取該函數。

以下程式碼片段說明了此行為:

namespace foo {
  struct bar {
    friend void baz();
  };
}

// Compilation error in main: 'baz' is not accessible through unqualified lookup
int main() {
  foo::baz();
}

以上是C 中內聯友元函數的作用域實際上是如何運作的?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn