我有以下代码片段。有谁知道为什么主函数中的所有情况都没有调用这个移动构造函数?为什么它仍然编译?赋值运算符是私有的?这里的链接:http: //ideone.com/bZPnyY
#include <iostream>
#include <vector>
class A{
public:
A(int i){
std::cout << "Constructor "<< i <<std::endl;
for(int l = 0; l<i;l++){
vec.push_back(l);
}
};
A(A && ref): vec(std::move(ref.vec))
{
std::cout << "Move constructor"<<std::endl;
}
A & operator=(A && ref){
if(this != &ref){
vec = std::move(ref.vec);
}
std::cout << "Move assignment"<<std::endl;
return *this;
}
std::vector<int> vec;
private:
A(const A & ref);
A(A & ref);
A & operator=(A & ref);
};
A makeA(){
A a(3);
return a;
}
int main(){
A b1(makeA()) ;
A b2 = makeA();
A b3 = A(3);
A b4(A(3));
std::cout << b4.vec[2] << std::endl;
};
输出:
构造
函数 3 构造函数 3 构造函数
3 构造
函数 3
2
回复的一些补充:当我添加
std::pair<int,A> a(3,A(3));
然后调用移动构造函数(所以希望没有 NRVO)