存取內聯友元函數:詞法作用域和實際作用域
在類別中宣告內聯友元函數時,重要的是不僅要考慮它們的詞法作用範圍以及它們的實際範圍。從詞法上講,此類函數駐留在定義它們的類別中。但是,它們的實際可訪問性可能會受到上下文的限制。
根據 C 標準 (ISO/IEC 14882:2011),當朋友函數在類別中使用非限定識別碼聲明,它引用最近的封閉命名空間範圍內的函數。但是,此友元聲明不會使該函數對該範圍內的正常查找可見。相反,它只能透過參數相關查找 (ADL) 來存取它。
標準的 7.3.1.2/3 中強調了此行為:
「如果朋友聲明在非-local class首先聲明一個類別或函數,友元類別或函數是最內層封閉命名空間的成員。 >
本質上,內聯友元函數只能透過ADL 調用,在不提供參數時這是不可能的。因此,嘗試直接透過類別的封閉範圍或透過成員函數呼叫此類函數將導致編譯錯誤,如提供的程式碼範例中所示。以上是如何在 C 中存取內聯友元函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!