Как передать rvalue ссылку от вызывающего абонента к вызываемому - PullRequest
0 голосов
/ 03 марта 2019

Скажите, что у меня есть код ниже

#include <iostream>

void foo(std::string && s) { std::cout << s; }

void bar(std::string && s) { foo(s); }

int main() {

  bar("abc");

  return 0;
}

Я получил ошибку компиляции:

Ошибка: невозможно связать lvalue 'std :: string {aka std :: basic_string}''std :: string && {aka std :: basic_string &&}' void bar (std :: string && s) {foo (s);}

1 Ответ

0 голосов
/ 03 марта 2019

Использование std::move из <utility>:

#include <iostream>
#include <utility>

void foo(std::string && s) { std::cout << s; }

void bar(std::string && s) { foo(std::move(s)); }

int main() {

  bar("abc");

  return 0;
}

std::move - это на самом деле просто немного синтаксического сахара , но это распространенный способ пересылки ссылки на rvalue.

...