5

我有以下代码:

#include <cstdio>
#include <iostream>

using std::cout;

struct SomeType {
  SomeType() {}

  SomeType(const SomeType &&other) {
    cout << "SomeType(SomeType&&)\n";
    *this = std::move(other);
  }

  void operator=(const SomeType &) {
    cout << "operator=(const SomeType&)\n";
  }

  void operator=(SomeType &&) {
    cout << "operator=(SomeType&&)\n";
  }
};

int main() {
  SomeType a;
  SomeType b(std::move(a));
  b = std::move(a);
  return 0;
}

我希望移动构造函数调用移动赋值运算符。这是该程序的输出:

SomeType(SomeType&&)
operator=(const SomeType&)
operator=(SomeType&&)

如您所见,移动赋值运算符已成功调用,但在分配给*this内部移动构造函数时未成功调用。为什么会发生这种情况,我可以以某种方式解决它吗?

4

2 回答 2

7

您的移动构造函数采用 aconst SomeType&&而不是 a SomeType&&。您不能调用一个带有SomeType&&(您的移动构造函数)值为 type 的函数const SomeType&&

尝试制作一个带有SomeType&&.

于 2013-11-14T14:04:51.340 回答
5

std::move强制转换为 r 值引用。所以它转换otherconst SomeType &&. 这当然不能绑定到SomeType &&,所以它回退到const SomeType &

const从移动构造函数的参数中删除。

于 2013-11-14T14:05:18.400 回答