c++ - 错误 : no matching function for call to 'make_pair'

标签 c++

<分区>

我想把两个局部变量成对并返回它,这是我的代码:

#include <utility>
class Foo {

};

class Bar {

};

std::pair<Foo, Bar> test() {
  Foo foo;
  Bar bar;
  return std::make_pair<Foo, Bar>(foo, bar);
}

我得到了

main.cpp:92:10: error: no matching function for call to 'make_pair'   
/usr/bin/../lib/gcc/x86_64-linux-gnu/7.4.0/../../../../include/c++/7.4.0/bits/stl_pair.h:524:5:
note: candidate function not viable: no known conversion from 'Foo' to 'Foo &&' for 1st argument
    make_pair(_T1&& __x, _T2&& __y)

如果我使用 return std::make_pair<Foo, Bar>(std::move(foo), std::move(bar)); ,编译成功。那我错过了什么?

最佳答案

template< class T1, class T2 >
std::pair<V1,V2> make_pair( T1&& t, T2&& u );

因为您在模板参数列表中显式放置了类型 <Foo,Bar> ,所以类型推导被禁用,并且make_pair有签名make_pair(Foo&&, Bar&&).您传递的是左值,左值不能绑定(bind)到右值引用。不要将类型放在 <> 中或使用 pair<Foo,Bar>(foo,bar) .

另一种解决方案是依赖类型推导:make_pair(foo,bar)那么签名是make_pair(Foo&, Bar&)一切正常。

关于c++ - 错误 : no matching function for call to 'make_pair' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57869576/

相关文章:

c++ - 抛出异常时应用程序崩溃

c++ - 删除指针并检查地址

python - 如何从客户端接收 int 和 string 的缓冲区,并正确存储它们? (cpp 服务器,python 客户端)

c++ - Proactor 和异步写入

c++ - 应用程序首先崩溃 strcat_s

c++ - Infix To Postfix 的输出中没有运算符和括号

c++ - 为QWebView设置透明背景

c++ - 对数组使用unique_ptr,如何在 Debug模式下查看每个值 "local"或 "watch"标签

c++ - C++14 标准是否有缺陷/未指定 w.r.t.从初始化列表中推导出数组类型的函数参数?

c++ - 什么时候使用 C++ 模板更好?