C++ 为什么std::move的行为类似于std::copy?

C++ 为什么std::move的行为类似于std::copy?,c++,c++11,stl,move-semantics,c++-standard-library,C++,C++11,Stl,Move Semantics,C++ Standard Library,考虑下面的代码- #include <algorithm> #include <iostream> #include <vector> int main() { std::vector<int> d {100, 200, 300}; std::vector<int> l {1, 2, 3, 4, 5}; std::move(d.begin(), d.end(), std::inserter(l, l.beg

考虑下面的代码-

#include <algorithm>
#include <iostream>
#include <vector>

int main()
{

    std::vector<int> d {100, 200, 300};
    std::vector<int> l {1, 2, 3, 4, 5};

    std::move(d.begin(), d.end(), std::inserter(l, l.begin()));

    for (int n : l) std::cout << n << ' ';
    std::cout << '\n';
    for (int n : d) std::cout << n << ' ';
    std::cout << '\n\n';


    for (int &n : d) n +=5;

    for (int n : l) std::cout << n << ' ';
    std::cout << '\n';
    for (int n : d) std::cout << n << ' ';
    std::cout << '\n';
}

看起来这些值是从源容器复制到目标容器的,并且源容器可以保留原始值。这听起来像是一个
std::copy
操作吗

对于普通旧数据,移动和复制是相同的。只有通过复制才能移动普通数据。例如,如果您拥有某个其他对象的所有权,而该对象可以在不复制它的情况下进行传输(如
std::string
std::shared_ptr
has),则情况就不同了。但是对于
int
,这不适用。

从该答案中可以看出:std::move移动元素,如果可能,则复制。除了复制外,如何移动整数?请尝试使用具有不同行为的类型来移动和复制。
100 200 300 1 2 3 4 5 
100 200 300 

100 200 300 1 2 3 4 5 
105 205 305