首頁 > 後端開發 > C++ > 為什麼 C 11 中的明確模板參數 `std::make_pair` 會失敗?

為什麼 C 11 中的明確模板參數 `std::make_pair` 會失敗?

DDD
發布: 2024-12-16 16:58:17
原創
878 人瀏覽過

Why Does `std::make_pair` Fail with Explicit Template Parameters in C  11?

C 11 make_pair 使用明確模板參數失敗

問題:

問題:
std::pair<std::string, int>& b = std::make_pair<std::string, int>(s, 7);
登入後複製

使用🎜>使用時啟用-std=c 11之後,以下程式碼無法編譯:

儘管存在 make_pair 函數,但編譯器會出錯。

解釋:

error: no matching function for call to ‘make_pair(std::string&, int)’
登入後複製
std::make_pair 是有意的無需明確指定模板參數即可使用。在 C 11 中,它採用兩個右值參考參數,T&& 和 U&&,其中 T 和 U 是範本類型參數。但是,明確指定模板參數會導致預期的右值引用與提供的左值參數(範例程式碼中的)不符。

因此,編譯器報告:

當未明確提供模板參數時,會發生模板參數推導。這允許右值引用模板參數在作為函數參數出現時綁定到左值。在沒有模板參數的 std::make_pair 的情況下,編譯器將 T 推斷為 std::string& 並將 U 推斷為 int 並成功將 s 和 7 綁定到函數參數。

解:std::make_pair 的建議用法是省略模板參數,依靠模板參數推導。透過遵循這個規則,編譯器將正確處理參數匹配並避免編譯錯誤。

以上是為什麼 C 11 中的明確模板參數 `std::make_pair` 會失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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