C++;用函数调用替换内置运算符? 我最近在阅读C++中的运算符重载。所以,我想知道,在幕后,内置操作符是否会被函数调用所取代

C++;用函数调用替换内置运算符? 我最近在阅读C++中的运算符重载。所以,我想知道,在幕后,内置操作符是否会被函数调用所取代,c++,operator-overloading,C++,Operator Overloading,例如,a+b(a和b是int类型)是否被a.operator+(b)替换?或者编译器做了一些不同的事情?没有int::operator+。编译器是选择将a+b直接编译到程序集(可能),还是将其替换为一些内部函数,如int\uu add\u ints(int,int)(不太可能),这是一个实现细节。编译器的内部结构很复杂。在概念层面上,答案是肯定的。每当编译器看到a+b时,它必须检查名为operator+的已知函数,并用对正确函数的调用替换它 实际上,它们有两个重要的细微差别: 编译器知道基本类

例如,a+b(a和b是int类型)是否被a.operator+(b)替换?或者编译器做了一些不同的事情?

没有
int::operator+
。编译器是选择将
a+b
直接编译到程序集(可能),还是将其替换为一些内部函数,如
int\uu add\u ints(int,int)
(不太可能),这是一个实现细节。

编译器的内部结构很复杂。在概念层面上,答案是肯定的。每当编译器看到
a+b
时,它必须检查名为
operator+
的已知函数,并用对正确函数的调用替换它

实际上,它们有两个重要的细微差别:

  • 编译器知道基本类型(不能重写),它不需要插入函数调用,它可以立即插入正确的“指令”
  • 内联是一个重要的优化,它将在感兴趣时删除函数调用

  • 可能吧。许多算术运算将dir CALLIPSO映射到CPU指令中,编译器只需生成适当的代码即可。如果不可能,编译器将生成对适当函数的调用,并且运行库将具有该函数的定义。在过去,浮点运算通常是通过函数调用来完成的。现在,桌面系统的CPU有浮点硬件,而浮点数学是作为直接的CPU指令生成的。但是嵌入式系统通常没有硬件,因此编译器生成函数调用


    在很早的时候,甚至整数数学有时都是通过函数调用来完成的。由于他的原因,IBM 1620有时被称为学员:无法添加,甚至不尝试。

    回到g++3.96,用户定义类型的赋值通常使用memcpy()完成。我想编译器一定已经检查过udt是否为POD。我理解这一点,但为什么说运算符返回值或引用。例如:赋值运算符返回对左侧操作数的引用。我的意思是说为什么使用“return”这个词,它主要用于函数调用。@RomokDas我不是词源专家,对不起。