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

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

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-10 08:28:13840瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn