首頁 > 後端開發 > C++ > 為什麼參數相關查找 (ADL) 無法在沒有明確命名空間限定的情況下找到函數範本?

為什麼參數相關查找 (ADL) 無法在沒有明確命名空間限定的情況下找到函數範本?

Mary-Kate Olsen
發布: 2024-12-10 08:28:13
原創
870 人瀏覽過

Why Doesn't Argument-Dependent Lookup (ADL) Find Function Templates Without Explicit Namespace Qualification?

為什麼函數模板會抵制ADL 發現

在C 中,參數相關查找(ADL) 使編譯器能夠在沒有明確命名空間限定的情況下定位函數。然而,當涉及函數模板時,ADL 面臨著一個限制。

C 標準 03 的 14.8.1.6中捕獲了這個問題的癥結:

「但是當函數模板具有明確模板參數時使用時,呼叫不具有正確的語法形式,除非有一個具有該名稱的函數模板在呼叫點可見

讓我們用一個例子來分解它:

在下面的程式碼片段中,我們在命名空間ns 中有一個函數模板frob 和一個非模板函數non_template:

namespace ns {
    struct foo {};
    template<int i> void frob(foo const&amp;) {}
    void non_template(foo const&amp;) {}
}
登入後複製

雖然直接呼叫non_template 是允許的,但嘗試呼叫frob foo 物件無法編譯。在限定的情況下,呼叫frob(f) 在語法上無效。期間要尋找哪個frob 模板。定義。

以上是為什麼參數相關查找 (ADL) 無法在沒有明確命名空間限定的情況下找到函數範本?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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