【发布时间】:2018-10-10 14:17:57
【问题描述】:
class Foo {
int m_num;
public:
Foo() {}
Foo(int& n) {m_num = n;}
Foo(int&& n) {m_num = n;}
Foo(const Foo& src) {m_num = src.m_num;}
Foo(Foo&& src) {m_num = src.m_num;}
Foo& operator =(const Foo& src) {
m_num = src.m_num;
return *this;
}
Foo& operator =(Foo&& src) {// move
m_num = src.m_num;
return *this;
}
int& operator =(const int& src) {return m_num = src;}
int& operator =(int&& src) {return m_num = src;}
};
为什么当我调用Foo f4(Foo(2)); 时它调用Foo(int&& n) 构造函数而不是Foo(Foo&& src) 构造函数?
另外为什么不传递作为右值引用调用移动构造函数的 num ?
例如,Foo f = num 不调用移动构造函数。
int main() {
int&& num = 5;
/*int num{ 5 };*/ // initializer-list
Foo f = num; // custom constructor
f = num; // assignment operator
Foo f2 = 6; // custom move constructor
f2 = 10; // custom move assignment
f2 = f; // assignment operator
Foo f3(f); // custom constructor
// f3(f2); // ERROR
f3 = (f2); // assignment operator
Foo f4(Foo(2));
【问题讨论】:
标签: c++ constructor move-semantics