为什么明确声明其中一个特殊成员函数会禁用其他成员的生成

时间:2014-03-17 10:08:07

标签: c++ compiler-construction

这是一项技术要求,编译器无法以任何方式执行此操作或执行纯粹的安全性建议吗?

1 个答案:

答案 0 :(得分:1)

不,原因不是技术性的。

自动生成的特殊成员函数的设计有点像POD / C风格的struct类似操作,但是扩展了。这使得C ++类型的行为更加统一。

但并非所有类型的行为都应该如此。出于纯粹的语言/代码设计原因,C ++根据标准中规定的规则停止自动生成一些 - 决定删除它们比留下它们被惊讶或缺乏经验调用更好。可能有今天设计的语言,规则或3/5将明确如何隐式禁用成员函数自动生成。

C ++ 11添加=default作为一种方式,以便将它们带回来。

移动特殊成员函数都必须处理C ++ 03向后兼容性,而不是破坏现有代码。这里也没有技术障碍,只是语言设计和后向兼容性问题。