<分区>
这是编译器不能以任何方式完成的技术要求,还是强制执行的纯安全建议?
<分区>
这是编译器不能以任何方式完成的技术要求,还是强制执行的纯安全建议?
最佳答案
不,不是技术原因。
自动生成的特殊成员函数被设计成有点像 POD/C 风格的 struct
类似的操作,但是扩展了。这使得 C++ 类型的行为稍微更加统一。
但并非所有类型都应如此。出于纯粹的语言/代码设计原因,C++ 停止根据标准中规定的规则自动生成一些——决定删除它们比让它们在意外或缺乏经验时被调用要好。如果语言是今天设计的,规则或 3/5 将明确说明如何隐式禁用成员函数自动生成。
C++11 添加了 =default
作为一种将它们带回来的方法。
移动特殊成员函数既要处理 C++03 向后兼容性,又不能破坏现有代码。这里也没有技术障碍,只是语言设计和向后兼容性问题。
关于c++ - 为什么显式声明其中一个特殊成员函数会禁用其他成员函数的生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22451493/