lvalue и rvalue как параметры функции

Я пытаюсь понять Lvalue и Rvalue в C ++.

Поэтому я использую их как параметры, передаваемые функциям.
В этом первом случае у меня есть две функции, первая имеет ссылку на const int, в этом случае благодаря «const» (см. ссылка на сайтЯ могу передать первой функции и 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’

}

Хорошо!

Почему, если вторая функция становится шаблоном функции, как в примере ниже, я также могу передать 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
}

1

Решение

Важно то, что T был выведен, чтобы быть ссылкой. Так что если T является const int&тогда что T&& то есть const int& &&? Свертывание правила говорят, что это const int&,

Так когда T в T&& выводится, что && не обозначает ссылку rvalue, но ссылку, тип которой выводится, и может быть либо ссылкой rvalue, либо lvalue в зависимости от результата вывода. Говорят, что это ссылка для пересылки.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]