std :: move是否始终按预期工作?

1 c++ c++11

据我所知std::move(相同static_cast<T&&>)将变量转换为rvalue并分配给左值,因此我想在下面的代码中:

int a = 1;
int b = static_cast<int&&>(a);
Run Code Online (Sandbox Code Playgroud)

ba具有相同的地址,但在VS中,它打印不同的地址.

int a = 1;
int b = static_cast<int&&>(a);
cout << hex << &a << endl;
cout << hex << &b << endl;
Run Code Online (Sandbox Code Playgroud)

如果此后a仍然指向不同的内存位置,std::move在这种情况下使用有什么好处?

Som*_*ken 8

仅仅因为你"移动"它们并不意味着它们将共享相同的地址.移动一个值是一个高级抽象,int移动和复制等基本类型完全相同,这在这里发生.我建议你阅读std :: move上优秀帖子,了解它的用途以及它的用途.