c++ - 为什么显式声明其中一个特殊成员函数会禁用其他成员函数的生成

标签 c++ compiler-construction

<分区>

这是编译器不能以任何方式完成的技术要求,还是强制执行的纯安全建议?

最佳答案

不,不是技术原因。

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

但并非所有类型都应如此。出于纯粹的语言/代码设计原因,C++ 停止根据标准中规定的规则自动生成一些——决定删除它们比让它们在意外或缺乏经验时被调用要好。如果语言是今天设计的,规则或 3/5 将明确说明如何隐式禁用成员函数自动生成。

C++11 添加了 =default 作为一种将它们带回来的方法。

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

关于c++ - 为什么显式声明其中一个特殊成员函数会禁用其他成员函数的生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22451493/

相关文章:

c++ - 不同翻译单元中的变量初始化

c++ - 将文件传递给几个函数

c++ - 数字 ErrorMessage 的含义

c++ - 如何以 1 对 1 的方式将所有 64 位整数映射到不同的 64 位整数

C++ : In how many ways compiler optimizes away our code?

compiler-construction - PyPy 可以在 Python 可以运行的所有地方运行吗?

c++ - 子缓冲区实现

java - 为什么带有内部类的 Java 代码会生成第三个 SomeClass$1.class 文件?

memory - 垃圾收集语言是否可以编译为非垃圾收集语言,而不在运行时包含垃圾收集器?

java - 我如何区分某些标识符和变量声明之间的区别?