首頁 > 後端開發 > C++ > 為什麼參數相關查找 (ADL) 無法找到具有明確範本參數的函數範本?

為什麼參數相關查找 (ADL) 無法找到具有明確範本參數的函數範本?

Susan Sarandon
發布: 2024-12-11 12:42:12
原創
420 人瀏覽過

Why Does Argument-Dependent Lookup (ADL) Fail to Find Function Templates with Explicit Template Arguments?

ADL 和函數模板

參數相關查找(ADL) 透過促進函數和物件的自動查找C 中發揮重要作用基於所使用的參數類型的關聯命名空間。然而,這種機制在函數模板方面有其限制。

使用 ADL 尋找函數範本的限制

提供的程式碼片段中的最後一個呼叫由於無法編譯而失敗C 規範中的限制。根據C 標準03 第14.8.1.6 節:

「但是,當使用具有明確模板參數的函數模板時,調用不具有正確的語法形式,除非存在具有該名稱的函數模板可見在調用點。在給定的範例中,frob是對具有明確模板參數的函數模板的呼叫。但是,在 main 中呼叫時沒有可見的 frob 模板宣告。

與簡單函數名稱的區別

此限制不適用於簡單函數函數名稱。對於此類名稱,即使函數在呼叫範圍內不可見,也​​會使用 ADL。這是因為該呼叫仍然保持函數呼叫的語法形式。

範例

以下範例進一步說明了該行為:

在此範例中,對f 3 (b) 的呼叫格式錯誤,因為此時不存在名為f 的可見函數模板。對 A::f 3 (b) 的呼叫格式良好,因為 f 範本在 A 命名空間內可見。對 C::f 3 (b) 的呼叫格式不正確,因為 ADL 僅適用於非限定名稱。使用 using 指令來別名 C::f 使得對 f(b) 的呼叫格式良好,因為 f 名稱現在在呼叫時可見。

以上是為什麼參數相關查找 (ADL) 無法找到具有明確範本參數的函數範本?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板