」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 為什麼我不能直接從定義類別中呼叫內聯友元函數?

為什麼我不能直接從定義類別中呼叫內聯友元函數?

發佈於2024-12-22
瀏覽:687

Why Can\'t I Directly Call Inline Friend Functions from Within Their Defining Class?

內聯友元函數的可見性範圍

儘管在類別中定義了內聯友元函數,但它們的實際範圍超出了類別的邊界。 C 標準規定,內聯友元函數的名稱引用在最近的封閉命名空間範圍中聲明的函數。

但是,在該命名空間內提供匹配聲明之前,無法透過非限定或限定查找存取此聲明的函數。範圍。因此,從類別本身、封閉作用域或成員函數直接呼叫友元函數將導致錯誤。

此限制源自於以下事實:友元函數是在類別中宣告的,而沒有覆寫或重新定義現有的函數名稱。因此,編譯器無法識別類別或封閉命名空間範圍中的函數,直到在該命名空間中遇到明確聲明。

要存取內聯友元函數,可以使用參數相關查找 (ADL) 。 ADL 允許編譯器根據呼叫中使用的參數類型來搜尋函數。這種方法符合以下原則:函數被認為與作為參數傳遞的類型「相關」。

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3