C 是否会用功能调用代替内置运算符

Does C++ replace built-in operators with function calls?

本文关键字:内置 运算符 调用 功能 是否      更新时间:2023-10-16

i最近在阅读有关C 中运算符超载的信息。因此,我想知道内置运算符是否被幕后的功能调用代替。

例如,是a b(a和b是int类型)被a.er (b)代替吗?或编译器会做不同的事情?

没有int::operator+。编译器是否选择将a + b直接编译为汇编(可能)或用某些内部功能(例如int __add_ints(int, int)(不太可能)替换)是实现细节。

编译器的内部内容很复杂。从概念上讲,答案是肯定的。每当编译器看到a + b时,它确实必须检查使用名称operator+的已知功能,然后用呼叫正确的功能替换。

实际上,它们是2个重要的细微差别:

  • 编译器知道基本类型(您不能覆盖),它不需要插入函数调用,它可以立即插入正确的"指令"
  • 内线是一个重要的优化,当有趣的情况下,它将删除函数调用

也许。许多算术操作将DIR CALYPSO映射到CPU指令中,并且编译器将仅生成适当的代码。如果不可能,编译器将生成调用适当的函数,并且运行时库将对该功能进行定义。在过去,通常使用功能调用来完成浮点数学。如今,用于台式机系统的CPU具有浮点硬件,并且浮点数数学是直接CPU指令生成的。但是嵌入式系统通常没有硬件,因此编译器会生成函数调用。

回到实际的早期,有时甚至是通过功能调用来完成整数数学。由于他的,IBM 1620有时被称为学员:无法添加,甚至没有尝试。