This question already has answers here:
Passing int&& to f(int&&)
(3个答案)
3年前关闭。
我有代码
编译后,我得到
但是
因此,如果确定效果,则需要显式使用
(3个答案)
3年前关闭。
我有代码
void print(string &&str) {
cout << str << endl;
}
int main() {
string tmp("Hello");
string&& str = move(tmp);
//print(move(str));
print(str);
return 0;
}
编译后,我得到
error: cannot bind rvalue reference of type 'std::__cxx11::string&&' to lvalue of type 'std::__cxx11::string'
。但是
str
是对 r值的r值引用(不是吗?),所以我相信将其传递给print
是合理的。为什么会发生此错误? 最佳答案
您对value categories和类型感到困惑。
(强调我的)
str
的类型是rvalue-reference(对string
),但是作为命名变量,它是一个左值,不能绑定(bind)到右值引用。
如果允许,请考虑以下情况:
string tmp("Hello");
string&& str = move(tmp);
print(str); // str might be moved here
cout << str << endl; // dangerous; str's state is undeterminate
因此,如果确定效果,则需要显式使用
std::move
(将str
转换为xvalue)。10-06 03:04