【发布时间】:2014-11-06 05:10:52
【问题描述】:
我似乎不明白你为什么要使用move assignment operator:
CLASSA & operator=(CLASSA && other); //move assignment operator
结束,copy assignment operator:
CLASSA & operator=(CLASSA other); //copy assignment operator
move assignment operator 仅采用 r-value reference,例如
CLASSA a1, a2, a3;
a1 = a2 + a3;
在copy assignment operator 中,other 可以是使用copy constructor 或move constructor 的构造函数(如果other 使用右值初始化,则可以移动构造--如果move-constructor 已定义- -)。
如果是copy-constructed,我们将进行 1 份副本,并且该副本无法避免。
如果是move-constructed,则性能/行为与第一次重载产生的相同。
我的问题是:
1- 为什么要实现move assignment operator。
2- 如果other 是从r 值构造的,那么编译器会选择调用哪个assignment operator?为什么?
【问题讨论】:
-
1) 工作量少,2) 会模棱两可。
-
所以你是说 2) 第一个重载会被调用?
-
CLASSA & operator=(CLASSA && other);是 move assignment operator。不知道这会如何改变您所询问的内容。复制赋值运算符采用CLASSA或const CLASSA&。 -
@Kam:不。模棱两可的重载意味着当您尝试使用重载时重载解析失败,从而导致程序格式错误。
-
性能/行为将不相同。如果您通过 r 值引用,可能会少走一步。这是否重要取决于移动
CLASSA的成本。
标签: c++ c++11 overload-resolution