c++ - 移动构造函数和赋值运算符 : why no default for derived classes?

标签 c++ c++11 move-constructor

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

#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 进行的测试显示了相同的行为。

最佳答案

通读 0x FCD 中的 12.8(12.8/17 特别是移动构造函数),这似乎是一个 GCC 错误。我看到 4.5 中发生的事情与您在 4.4 中发生的事情相同。

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

关于c++ - 移动构造函数和赋值运算符 : why no default for derived classes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2694298/

相关文章:

C++11 实验函数

c++ - 从 lambda 访问 for_each 迭代器

C++ 类 : How does one 'reset' a template field in the move constructor?

c++ - (为什么)移动构造函数或移动赋值运算符应该清除它的参数吗?

c++ - 内存不断增长

c++ - arm和x86架构下的c/c++语言有什么区别

date - c++11时钟/时间点之间的隐式转换

c++ - move 构造函数与复制省略。哪一个会被调用?

c++获取函数的字节等价物并执行

c++ - 从带有 opengl 代码的 C++ 转换为带有 GUI 的 QT 应用程序?