內聯友元函數的可見範圍
儘管在類別中定義了內聯友元函數,但它們的實際範圍超出了類別的邊界。 C 標準規定,內聯友元函數的名稱引用在最近的封閉命名空間範圍中聲明的函數。
但是,在該命名空間內提供匹配聲明之前,無法透過非限定或限定查找存取此聲明的函數。範圍。因此,從類別本身、封閉作用域或成員函數直接呼叫友元函數將導致錯誤。
此限制源自於以下事實:友元函數是在類別中聲明的,而不覆蓋或重新定義現有的函數名稱。因此,編譯器無法辨識類別或封閉命名空間範圍中的函數,直到在該命名空間中遇到明確宣告為止。
要存取內聯友元函數,您可以使用參數相關查找 (ADL) 。 ADL 允許編譯器根據呼叫中使用的參數類型來搜尋函數。這種方法符合以下原則:函數被認為與作為參數傳遞的類型「相關」。
以上是為什麼我不能直接從定義類別中呼叫內聯友元函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!