void foo(string&& bar){
string* temp = &bar;
cout << *temp << " @:" << temp << endl;
}
“bar” 是一个 rvalue 还是一个 lvalue?
我问这个问题是因为显然我不能获取一个 rvalue 的地址,但是我可以获取一个 rvalue 引用的地址,就像这里所做的那样。
如果你可以对一个 rvalue 引用执行与 lvalue 引用相同的操作,那么使用 "&&" 而不是 "&" 来区分两者有什么意义呢?
bar
是一个左值(它的类型是右值,很奇怪)。然而,如果你调用了std::move
两次,可能会遇到问题。 - Guvantebar
进行了两次使用,正是因为这样的双重用途才使得bar
是一个左值(lvalue)——这样双重使用就不会导致问题。只有在明确使用std::move(bar)
时,它才会被视为右值(rvalue)。 - Angew is no longer proud of SObar
将会被销毁,这就是你得到的结果。但是,如果你在你的函数内部调用另一个函数,除非你明确表示,否则你不能保证这一点。 - Guvantestd::move
或等效方法),因此您的函数可以假设可以从中移动数据。 - Mike Seymour