多年前,我认为 C 与 C++ 相比绝对是纯粹的,因为编译器无法生成任何您无法预测的代码。我现在相信反例包括volatile
关键字和内存屏障(在多处理器编程或内存映射硬件设备的设备驱动程序中,纯汇编语言比 C 编译器的优化更纯粹)。
目前我正在尝试列举 C++ 编译器可以做的不可预测的事情。我对 C++ 的主要抱怨是编译器会隐式实例化临时对象,但我相信这些情况都是可以预料的。我想到的案例是:
- 当一个类为自身以外的类型定义复制构造函数时,不使用
explicit
关键字 - 当一个类定义一个重载的转换运算符时:
operator ()
- 当函数通过值而不是通过引用接受对象时
- 当函数按值而不是按引用返回对象时
还有其他人吗?