0
有人可以幫助我理解爲什麼下面的代碼型扣,而使用通用引用
template< typename T >
void check()
{
std::cout << "unknow type" << std::endl;
}
template<>
void check<int>()
{
std::cout << "int" << std::endl;
}
template<>
void check<int&>()
{
std::cout << "int&" << std::endl;
}
template<>
void check<int&&>()
{
std::cout << "int&&" << std::endl;
}
template< typename T >
void bar(T&& a)
{
check<T>();
}
int main()
{
bar(0);
int a = 0;
bar(a);
}
的輸出
int
int&
,而不是
int&&
int&
從我的觀點。看來,r值參考仍然是一個r值參考值和一個l值參考值alue引用,但是,似乎只有l值引用保留爲l值引用,r值變爲非引用值。 這背後的動機是什麼?
您正在使用'check',而不是'檢查';爲什麼您希望'&&'在您明確省略時出現? –
ildjarn
我預計'bar(0)'與'(0)'相同。當用'bar (0)'在我的代碼中替換'bar(0)'時,輸出實際上是'int && \ n int&'。 –
「酒吧」的類型爲「無效(T &&)」,「酒吧」的類型爲「無效(T && &&)」(在參考摺疊之前)。 –
Oktalist