C ++でLvalueとRvalueを理解しようとしています。
そのため、関数に渡されるパラメーターとしてそれらを使用しています。この最初のケースでは 2 つの関数があり、最初の関数には const int への参照があります。この場合、「const」のおかげで (リンクを参照)、最初の関数に左辺値と右辺値の両方を渡すことができ、問題はありません。 . 代わりに 2 番目の関数で、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’
}
わかった!
以下の例のように、2 番目の関数が関数テンプレートになると、左辺値も渡すことができます。
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
}