內聯友元函數的可見性範圍
儘管在類別中定義了內聯友元函數,但它們的實際範圍超出了類別的邊界。 C 標準規定,內聯友元函數的名稱引用在最近的封閉命名空間範圍中聲明的函數。
但是,在該命名空間內提供匹配聲明之前,無法透過非限定或限定查找存取此聲明的函數。範圍。因此,從類別本身、封閉作用域或成員函數直接呼叫友元函數將導致錯誤。
此限制源自於以下事實:友元函數是在類別中宣告的,而沒有覆寫或重新定義現有的函數名稱。因此,編譯器無法識別類別或封閉命名空間範圍中的函數,直到在該命名空間中遇到明確聲明。
要存取內聯友元函數,可以使用參數相關查找 (ADL) 。 ADL 允許編譯器根據呼叫中使用的參數類型來搜尋函數。這種方法符合以下原則:函數被認為與作為參數傳遞的類型「相關」。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3