我想将两个局部变量放入一对并返回,这是我的代码:
#include <utility>
class Foo {
};
class Bar {
};
std::pair<Foo, Bar> test() {
Foo foo;
Bar bar;
return std::make_pair<Foo, Bar>(foo, bar);
}
Run Code Online (Sandbox Code Playgroud)
我得到了
Run Code Online (Sandbox Code Playgroud)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 );
Run Code Online (Sandbox Code Playgroud)
因为您将显式类型明确地放置在模板参数列表中<Foo,Bar>,所以禁用了类型推导,并且make_pair具有签名。make_pair(Foo&&, Bar&&).您正在传递左值,因此左值不能绑定到右值引用。不要输入<>或使用类型pair<Foo,Bar>(foo,bar)。
另一个解决方案是依靠类型推导:make_pair(foo,bar)然后是签名make_pair(Foo&, Bar&),一切正常。
| 归档时间: |
|
| 查看次数: |
61 次 |
| 最近记录: |