【发布时间】:2021-02-24 02:48:27
【问题描述】:
我的代码如下:
#include <iostream>
using namespace std;
class A{
public:
void sendByRvalue(string&& str){
cout << str << endl;
}
};
class B{
private:
A a;
void send(string&& str){
a.sendByRvalue(str);
}
public:
void run(const string& str){
send("run " + str + "\n");
}
};
int main(void){
string str("hello world");
B b;
b.run(str);
return 0;
}
好像B::send函数中的str改成了左值。然后我改了B::send的实现,比如:
class B{
private:
A a;
void send(string&& str){
cout << boolalpha << is_rvalue_reference<decltype(str)>::value << endl;
a.sendByRvalue(std::move(str));
}
public:
void run(const string& str){
send("run " + str + "\n");
}
};
为什么参数 str 是一个右值引用,但我不能在没有 std::move 的情况下直接将它传递给函数 A::sendByRvalue ?
【问题讨论】:
-
好问题。不过我建议这样做:对于您的编译错误,最好将它们以书面形式提供,以便其他搜索类似错误的人可能会发现这个问题。为了使其可读,您可以将其格式化为引号。对于这个问题,它并不重要,但社区不喜欢文字图片是 SO 的一般规则。
-
好建议!让其他人可以通过谷歌搜索相同的错误消息来找到这个问题是个好主意。我试图将这些消息更改为书面格式。但它看起来很奇怪。所以我别无选择,只能粘贴那些图片
标签: c++ rvalue-reference rvalue lvalue-to-rvalue pass-by-rvalue-reference