C++11 为什么不是';移动构造函数没有调用吗?

C++11 为什么不是';移动构造函数没有调用吗?,c++11,C++11,我刚刚学习了移动构造函数,并试图编写一个示例来测试我的理解。我在std::vector类周围设计了一个小包装器: #include <iostream> #include <utility> #include <vector> class Vector{ std::vector<int> v; public: Vector(int n):v(n, 1){std::cout << "In default construc

我刚刚学习了移动构造函数,并试图编写一个示例来测试我的理解。我在std::vector类周围设计了一个小包装器:

#include <iostream>
#include <utility>
#include <vector>

class Vector{
    std::vector<int> v;
public:
    Vector(int n):v(n, 1){std::cout << "In default constructor" << std::endl;};
    Vector(Vector&& _v){
        std::cout << "In Move constructor" << std::endl;
        v = std::move(_v.v);
    }

};
Vector build(int n){
    Vector v(n);
    return v;
}

int main() {
    auto && v = build(100000);
}
#包括
#包括
#包括
类向量{
std::向量v;
公众:
向量(intn):v(n,1){std::cout
为什么不调用move构造函数

因为它没有被调用的范围。如果您希望它在
auto&&v=build(100000);
中被调用,那么它是不正确的,因为
v
是一个r值引用变量而不是一个对象。构造函数被调用到对象上

知道函数返回时为什么不调用复制构造函数吗

这是因为复制省略和返回值优化。您可以在此处获得更多信息: