10

私はコードをもっている:

void f(int&& i) {
  auto lambda = [](int&& j) { (void)j; }
  lambda(i);
}

int main() {
  f(5);
}

Clang++ でエラーが発生します。no known conversion from 'int' to 'int &&' for 1st argument

に渡されるときにiがその型を に変更するのはなぜですか?intlambda()

4

3 に答える 3

4

iは名前であり、パラメーターが右辺値参照としてマークされていても、名前でアクセスされるオブジェクトは自動的に LValue になります。またはiを使用して右辺値にキャストバックできますstd::movestd::forward

void f(int&& i) {
  auto lambda = [](int&& j) { (void)j; };
  lambda(std::move(i));
}

int main() {
  f(5);
}
于 2014-02-21T17:38:43.340 に答える