Das Programm L-Wert ist als unten:vorbei rvalue Raises binden kann nicht
#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);
}
Der Compiler beschwert sich:
error: rvalue reference to type 'int' cannot bind to lvalue of type 'int'
Aber mein Verständnis, wie T2
mit int
instanziiert wird, dann ist die Art von t2
ist int&&
, daher sollte es erlaubt sein, das erste Argument der Funktion g
zu übergeben (int &&
).
Was ist falsch mit meinem Verständnis?
Ich verstehe nicht, warum t2 lvalue ist, der Typ von t2 ist "int &&", was wie eine rvalue-Referenz aussieht. – Charles0429
@ Charles0429 t2 hat einen Namen, du kannst seine Adresse nehmen, also ist es ein Lvalue. Die Tatsache, dass es an rvalue binden kann, bedeutet nicht, dass es sich um einen rvalue handelt. – Amadeus
@ Charles0429 Siehe Bearbeiten. – kfsone