C 中的參數相關查找和函數模板
參數相關查找(ADL) 是一種語言功能,使編譯器能夠搜尋標識符在與函數呼叫的參數關聯的命名空間內。雖然 ADL 通常會尋找函數,但在某些情況下無法找到函數範本。
C 標準解釋
C 標準 (2003) 第 14.8.1.6節指出那:
「但是當使用帶有明確模板參數的函數模板時,調用沒有正確的語法形式,除非在調用時存在具有該名稱可見的函數模板。如果沒有可見的此類別名稱,則該呼叫在語法上不正確,並且依賴參數的查找不適用。 🎜>範例
考慮以下範例:
main 中的最後一個呼叫(frob(f);) 無法編譯,因為在呼叫範圍內沒有名稱為frob 的函數模板可見。 ADL 找不到 frob;因為編譯器的語法不認為函數模板是有效的函數呼叫。
namespace ns { struct foo {}; template<int i> void frob(foo const&) {} void non_template(foo const&) {} } int main() { ns::foo f; non_template(f); // This is fine. frob<0>(f); // This is not. }
其他注意事項
對於簡單的函數名稱(沒有模板參數),ADL 仍然可以找到函數模板,即使其名稱不可見。
以上是為什麼在 C 中參數依賴查找無法找到具有顯式模板參數的函數模板?的詳細內容。更多資訊請關注PHP中文網其他相關文章!