簡體   English   中英

接受通用引用並返回const引用的函數的無法解釋的行為

[英]Inexplicable behaviour of the function accepting a universal reference and returning a const reference

我一直認為接受通用引用的以下函數必須返回一個const-reference。

template <typename T>
const T& Const(T&& val)
{
    return val;
}

但是,以下代碼使用VS C ++和gcc成功編譯:

int x = 5;
Const(x) = 6;

運行后變量x的值等於6。 因此,Const函數返回非const引用。

要獲得編譯器錯誤,必須修改函數Const以接受傳統的l值引用或聲明為返回const std::remove_reference_t<T>&

這是為什么? 我錯過了什么規則? 提前致謝!

一個普遍的參考

不,他們被稱為“轉發參考” “通用引用”一詞已棄用。


這是為什么?

當您調用Const(x)x是左值,因此T推導為int& 您的退貨類型將變為:

  • const T & = T const & - > int & const & - > int &

int & const &是對intconst引用的引用,它與int&相同。 (在這種情況下, const適用於int& ,而不僅僅是int ,因為T = int&

暫無
暫無

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

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