簡體   English   中英

為什么刪除了as_const的const &&重載?

[英]Why is the const&& overload of as_const deleted?

關於C ++ 17進展的博客上,我閱讀了以下內容:

P0007提出了一個輔助函數模板as_constas_const需要一個引用並將其作為對const的引用返回。

 template <typename T> std::add_const_t<T>& as_const(T& t) { return t } template <typename T> void as_const(T const&&) = delete; 

為什么刪除const&&重載?

考慮如果你沒有那個重載會發生什么,並嘗試傳入一個const rvalue:

template <typename T> const T &as_const(T &t) { return t; }
struct S { };
const S f() { return S{}; }
int main() {
  // auto & ref = as_const(S()); // correctly detected as invalid already
  auto & ref = as_const(f()); // accepted
}

這將被接受,因為T將被推導為const S ,並且臨時數可以綁定到const S & 結果是你不小心得到一個臨時的左值引用,它將在ref初始化后立即銷毀。 幾乎所有采用左值(無論是變量還是函數參數)的用戶都不希望傳遞臨時值; 默默地接受臨時工作意味着你很容易默默地獲得懸掛的參考資料。

暫無
暫無

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

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