內聯友元函數的範圍
在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中文網其他相關文章!