gpt4 book ai didi

c++ - 在 C++ 中意外创建临时对象的方法?

转载 作者:可可西里 更新时间:2023-11-01 18:38:10 28 4
gpt4 key购买 nike

多年前,我认为与 C++ 相比,C 绝对是纯粹的,因为编译器无法生成您无法预测的任何代码。我现在相信反例包括 volatile 关键字和内存屏障(在多处理器编程或内存映射硬件设备的设备驱动程序中,普通汇编语言甚至比 C 编译器的优化更纯粹) .

目前我正在尝试列举 C++ 编译器可以做的不可预测的事情。我对 C++ 的主要提示是编译器将隐式实例化临时对象,但我相信这些情况都是可以预料的。我想到的案例是:

  • 当一个类在不使用 explicit 关键字的情况下为自身以外的类型定义复制构造函数时
  • 当一个类定义一个重载的转换运算符时:operator()
  • 当函数通过值而不是通过引用接受对象时
  • 当函数按值而不是按引用返回对象时

还有其他的吗?

最佳答案

我想“不可预测”的意思是“符合标准但与程序员在编写代码时所期望的不同”,对吧?

我想您可以从代码中看出实例化或复制对象的位置,即使它可能并不明显。虽然这可能很难理解。

有些东西只是由(所有?)编译器供应商以某些方式实现的,但可以用不同的方式来实现。例如,后期绑定(bind)(又名调用重载的虚方法)通常在后台使用函数指针来实现。这可能是最快的方法,但我想它可以以不同的方式完成,那将是意想不到的。我不认识任何编译器,尽管它的做法有所不同。

从 C++ 过于复杂的意义上来说,很多东西是意想不到的——几乎没有人理解完整的语言。如此意外也取决于你的知识。

关于c++ - 在 C++ 中意外创建临时对象的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2222110/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com