Точная разница между rvalue и lvalue

Пока я читалhttp://thbecker.net/articles/rvalue_references/section_01.htmlДелаю следующий отрывок.

// lvalues:
//
int i = 42;
i = 43; // ok, i is an lvalue
int& foo();
foo() = 42; // ok, foo() is an lvalue
int* p1 = &foo(); // ok, foo() is an lvalue

// rvalues:
//
int foobar();
int j = 0;
j = foobar(); // ok, foobar() is an rvalue
int* p2 = &foobar(); // error, cannot take the address of an rvalue
j = 42; // ok, 42 is an rvalue

Почему int * p2 = &Foobar (); является ошибкой, тогда как int * p1 = &Foo (); это не ошибка Как позже человек становится lvalue, а первый - rvalue?

заранее спасибо

Ответы на вопрос(2)

Ваш ответ на вопрос