2
我想知道這是可能的嗎?傳遞一個左值給RValue的參數
template<typename T>
void Test(T&& arg)
{
arg = 14;
}
int a = 23;
Test(a);
我的問題是,功能測試需要類型右值的參數但是這似乎也接受類型左值的參數。這是爲什麼 ?那是因爲模板的存在嗎?因爲如果我做這樣的事情
void AnotherTest(int&& arg)
{
arg = 14;
}
然後該函數要求參數是類型Rvalue。 如果有人能解釋爲什麼模板的存在會改變行爲,我將不勝感激。
查找「參考摺疊」和「通用參考」。 – juanchopanza
'T &&'不是一個右值引用(而'int &&'是)。根據參數表達式的值類別,它將*推導*爲rvalue-或lvalue-reference。 Scott Meyers [稱之爲](https://isocpp.org/blog/2012/11/universal-references-in-c11-scott-meyers)*通用參考*。 – jrok
@jrok:大概,但並非真正正確。模板參數*推導*,而不是模板函數參數。參數的類型將會是推導類型的一個* rvalue-reference *,最終可能是* lvalue-reference *參數。 –