Я пытаюсь понять Lvalue и Rvalue в C ++.
Поэтому я использую их как параметры, передаваемые функциям.В этом первом случае у меня есть две функции, первая имеет ссылку на const int, в этом случае благодаря «const» (см. link ) я могу передать первой функции как Lvalue, так и Rvalueи у меня не будет проблем.Во второй функции вместо этого я обязан передать Rvlaue, иначе я получаю описанную ошибку.
void f1(const int& n){cout<<"[Lvalue]"<<endl;}
void f2(int&& n){cout<<"[Rvalue]"<<endl;}
int main()
{
const int n = 10;
f1(n);
f2(n); //error: cannot bind rvalue reference of type ‘int&&’ to lvalue of type ‘const int’
}
ok!
Почему, если вторая функция становится шаблоном функции, как в примерениже я также могу передать Lvalue.
void f1(const int& n){cout<<"[Lvalue]"<<endl;}
template<class T>
void f2(T&& n){cout<<"[Rvalue]"<<endl;}
int main()
{
const int n = 10;
f1(n);
f2(n); //ok
}