首頁 > 後端開發 > C++ > 為什麼在 C 11 的 `make_pair` 中明確指定模板參數無法編譯?

為什麼在 C 11 的 `make_pair` 中明確指定模板參數無法編譯?

Mary-Kate Olsen
發布: 2024-12-21 11:43:17
原創
189 人瀏覽過

Why Does Explicitly Specifying Template Parameters in C  11's `make_pair` Fail to Compile?

具有明確模板參數的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中文網其他相關文章!

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