在std::forward 中禁用模板參數推導
問題:
為什麼是template在Visual Studio 執行std::forward 時禁用參數推導2010?
答案:
std::forward 是一個用於完美轉送的實用函數,其中輸入參數的類型保留在輸出參數中。但是,如果在 std::forward 中啟用了模板參數推導,則在某些情況下可能會導致不正確的行為。
具體來說,如果輸入參數是左值或 const 左值(即具有名稱的物件) ),則範本參數推導會將參數類型推導為左值或 const 左值參考。在完美的轉發場景中,這不是我們想要的,因為目標是保留輸入參數的確切類型。
為了說明潛在的問題:
在此例如,如果std::forward 使用模板參數推導,則test(x) 和test(y) 中的參數類型將被錯誤地推導為int&,從而導致意外
為了防止此問題,std::forward 的實現使用恆等元函數明確指定類型參數,從而有效禁用模板參數推導。這確保了輸入參數的類型保留在輸出參數中,無論它是右值還是左值。
以上是為什麼 Visual Studio 2010 中的 std::forward 中的範本參數推導被停用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!