6

为什么没有为派生类创建默认的移动构造函数或赋值运算符?证明我的意思;有这个设置代码:

#include <utility>

struct A
{
  A () { }
  A (A&&) { throw 0; }
  A& operator= (A&&) { throw 0; }
};

struct B : A
{ };

以下任一行抛出:

A  x (std::move (A ());
A  x;  x = A ();

但以下都不是:

B  x (std::move (B ());
B  x;  x = B ();

万一这很重要,我用 GCC 4.4 进行了测试。

编辑:稍后使用 GCC 4.5 进行的测试显示了相同的行为。

4

1 回答 1

5

读取 0x FCD 中的 12.8(特别是对于移动 ctor 的 12.8/17),这似乎是一个 GCC 错误。我看到在 4.5 中发生的事情与在 4.4 中发生的一样。

我可能遗漏了有关已删除功能的极端情况或类似情况,但我还没有看到任何迹象。

于 2010-04-22T21:11:21.830 回答