具有明確模板參數的C 11 make_pair 無法編譯
在C 11 中,make_pair 函數旨在方便創建對指定的資料類型。但是,在函數呼叫中明確指定模板參數可能會導致編譯錯誤。
make_pair 函數遵循範本語法:
template<typename T, typename U> make_pair(T&& argT, U&& argU);
此語法顯示 make_pair 接受兩個右值引用, argT 和 argU,並從指定參數推導出範本類型參數 T 和 U。
明確提供範本參數時,如in:
std::make_pair<std::string, int>(s, 7);
需要右邊值參考參數。但是,傳遞的左值參數 s 不符合此要求。因此,編譯器無法在參數類型和右值引用參數類型之間建立匹配。
相反,當省略模板參數時,編譯器會執行模板參數推導,從而成功將 s 綁定到 T ( std::string&) 和 7 到 U (int&&)。模板參數中右值引用的獨特行為促進了此過程,無論左值還是右值狀態如何,它們都可以綁定到同一模板參數的任何類型。
要解決該錯誤,只需省略顯式模板參數規格。
以上是為什麼在 C 11 的 `make_pair` 中明確指定模板參數無法編譯?的詳細內容。更多資訊請關注PHP中文網其他相關文章!