簡體   English   中英

是否使用T const&或T &&

[英]Whether to use T const& or T&&

我很好奇,一般來說,你是否要使用T &&(通用引用)而不是經典的T const&(l值引用)來模擬以C ++ 11開頭的模板化函數參數。 我特別好奇的是,如果你想要處理r值引用,你如何繞過這個事實,你被迫失去const; 有沒有解決的辦法?

“失去const”沒有問題。 T將與CV-預選賽推斷如果參數為CV-合格。 例如,如果參數是const std::string類型的右值,則T將推導為const std::string 通過使用轉發引用,您不可能違反const-correctness。 如果可以,那將是一個主要的語言缺陷。

至於何時應該使用轉發引用這一更廣泛的問題,請參見此處: 正確使用通用引用

這個問題非常微不足道,因為你要求提出意見,但要回答技術問題,你不要松開常數。 這就是為什么它被稱為通用參考。

你不會被迫丟失const: template<typename T> void fun(T &&val)可能綁定非const lvalues,const l-values和rvalues。 您仍然可以完全允許執行template<typename T> void fun(const T &v) ,這將是const引用的更專業的重載,因此不可修改的l值將達到此重載。

具有“前向引用”的第一個重載將綁定到可修改的值和rvalues。 如果我閱讀帶有轉發引用的模板函數的原型(S. Meyers為“通用引用”施洗),那告訴我的是該函數可能會利用移動語義,僅此而已。

可以在內部檢測參數的常量; 但是,既然你問這是否是推薦的一般方法,我會建議在自己的重載中管理不可修改的l值,除非是不切實際的(例如處理多個參數時可能或不是const)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM