首页 > 解决方案 > 如何将右值引用从调用者传递给被调用者

问题描述

说我有下面的代码

#include <iostream>

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

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

int main() {

  bar("abc");

  return 0;
}

我得到编译错误:

错误:无法将 'std::string {aka std::basic_string}' 左值绑定到 'std::string&& {aka std::basic_string&&}' void bar(std::string && s) { foo(s); }

标签: c++11rvalue-reference

解决方案


使用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实际上只是一点点语法糖,但却是转发右值引用的常用方式。


推荐阅读