為什麼函數模板會抵制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&) {} void non_template(foo const&) {} }
雖然直接呼叫non_template 是允許的,但嘗試呼叫frob foo 物件無法編譯。在限定的情況下,呼叫frob(f) 在語法上無效。期間要尋找哪個frob 模板。定義。
以上是為什麼參數相關查找 (ADL) 無法在沒有明確命名空間限定的情況下找到函數範本?的詳細內容。更多資訊請關注PHP中文網其他相關文章!