有代码
string one = "one";
string two{ one };
string three{ move(one)};
cout << one << endl;
这会打印“”。这是因为调用了字符串三的 move 构造函数并窃取了其参数值。但是,变量一怎么会被修改呢?
当我们传递 move(one)
时,会返回右值。并且 move 构造函数从该右值窃取资源,变量一不作为引用或指针传递到那里。那么为什么会发生这样的行为呢?
感谢您的解答
最佳答案
std::move()
实际上并没有改变它的参数
...但它确实让代码获取其输出“蚕食”参数。因此,您的 two
字符串会占用 one
的缓冲区,将其留空。
您还可以阅读this detailed explanation关于网站上的 std::move()
(回答问题 "what is std::move() and when should it be used" )。
关于c++ - 为什么 std::move( arg ) 改变 arg 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47114551/