C 是否会用功能调用代替内置运算符
Does C++ replace built-in operators with function calls?
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有时被称为学员:无法添加,甚至没有尝试。
相关文章:
- 内置函数可查看CPP中的成员变量
- 是否有内置方法可以强制转换为不同的基础类型,但保留常量限定符?
- 按字母顺序对字符串中的字母进行排序,而无需使用内置的 sort()
- C++内联运算符重载中,请参阅当前对象
- 将字符串转换为浮点数或整数,而无需使用内置函数(如 atoi 或 atof)
- 何时包含内置类型和运算符的标头?
- 将内置类型变量传递给只有一个类类型参数的"+"运算符函数时自动类型转换的构造函数
- c++标准是否指定了运算符&&(内置)的求值顺序?
- 运算符表达式上下文中重载解析的内置运算符候选项的正确行为
- 内置类型的运算符函数
- 内置类型的重载运算符
- 内置运算符(新的,删除和函数调用除外)如何返回
- C 是否会用功能调用代替内置运算符
- 为什么指针类型的内置关系运算符不生成C++的总顺序?
- 如何使用内置返回类型重载运算符?
- std::result_of 用于内置运算符
- 我可以使用函数表示运算符#()来调用内置类型的运算符吗
- 是否可以获取内置标准运算符的函数指针
- 内置类型的运算符重载C++以访问 2D 数组中的元素
- 获取 &for 内置和运算符的类型&()?