一段时间以来,这一直让我感到困惑。而且到目前为止我还没有找到满意的答案。问题很简单。什么时候有一个move assignment operator
接到电话,什么时候move constructor operator
接到电话吗?
cppreference.com 上的代码示例产生以下有趣的结果:
移动赋值运算符: http://en.cppreference.com/w/cpp/language/move_operator
a2 = std::move(a1); // move-assignment from xvalue
移动构造函数: http://en.cppreference.com/w/cpp/language/move_constructor
A a2 = std::move(a1); // move-construct from xvalue
那么这与实施的内容有关吗?如果是的话,如果两者都实现了,会执行哪一个?如果无论如何都是相同的,为什么有可能创建移动赋值运算符重载。
仅当构造对象时才会执行移动构造函数。移动赋值运算符在先前构造的对象上执行。这与复制案例中的场景完全相同。
Foo foo = std::move(bar); // construction, invokes move constructor
foo = std::move(other); // assignment, invokes move assignment operator
如果您没有显式声明它们,编译器会为您生成它们(有一些例外,其列表太长,无法在此处发布)。
See this http://www.slideshare.net/ripplelabs/howard-hinnant-accu2014有关何时隐式生成移动成员函数的完整答案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)