1

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
}
4

1 に答える 1