1
該方案如下:傳遞右值加薪不能綁定到左值
#include <iostream>
using namespace std;
template <typename F, typename T1, typename T2>
void flip2(F f, T1 &&t1, T2 &&t2)
{
f(t2, t1);
}
void g(int &&i, int &j)
{
cout << i << " " << j << endl;
}
int main(void)
{
int i = 1;
flip2(g, i, 42);
}
編譯器會抱怨:
error: rvalue reference to type 'int' cannot bind to lvalue of type 'int'
但我的理解,爲T2
進行實例化int
,然後類型t2
是int&&
,所以應該允許它傳遞到函數g
的第一個參數(int &&
)。
我的理解有什麼問題?
我不明白爲什麼t2是左值,t2的類型是int &&,這看起來像一個右值引用。 – Charles0429
@ Charles0429 t2有一個名字,你可以把它的地址,所以,它是一個左值。它可以綁定到右值的事實並不意味着它是一個右值 – Amadeus
@ Charles0429請參閱編輯。 – kfsone