[英]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 &
是對int
的const
引用的引用,它與int&
相同。 (在這種情況下, const
適用於int&
,而不僅僅是int
,因為T = int&
) 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.