【发布时间】:2021-03-24 01:43:15
【问题描述】:
我发现下面的链接说“左值和右值引用接口可以结合在一起”。 Pass lvalue to rvalue
但是当我以它为例时。出现编译错误cannot bind ‘std::string {aka std::basic_string}’ lvalue to ‘std::string&& {aka std::basic_string&&}’。下面是我的实现。
#include <iostream>
#include <string>
using namespace std;
void g(string &&b) {
cout << b << endl;
}
void g(const string &b) {
cout << b << endl;
}
void f(string &&a) {
g(std::forward<string>(a));
}
int main()
{
f("1122");
string a("222");
f(a);
return 0;
}
我的意思是“void f(string &&a)”和“void f(const string &a)”可以合二为一。然后我们只需要调用“void f(string &&a)”,它既可以接收右值引用也可以通过前导接收左值。
--------- 添加说明
这可能是电话universal reference
【问题讨论】:
-
您想要关注链接问题的哪个答案?是使用模板(与您的代码不同)还是直接执行到统一函数(您的代码从统一函数)?两者都不是您所做的完美匹配,并且您链接到问题而不是特定答案...
标签: c++