原始类型的+运算符是否重载?

mun*_*ish 5 c++ operator-overloading

已经重载的运算符<<,>>,=等多次使用.

我想到的一个例子是当我们添加字符串时说:

string name = string("munish")+"kumar";

+运算符在字符串类中重载.

但是当我们添加像1 + 2这样的数字时(似乎不像是重载的操作员调用)

我只是想知道编译器是如何进行二进制加法的.

如果编译器这么做的话,我不需要担心它,只是好奇的问题.

Naw*_*waz 8

原始类型没有实现operator+哪个实际上是具有奇怪名称的函数.原始类型的添加由CPU指令执行,例如:

addl %edx,(%eax) //this adds two integral values loaded at edx and eax
Run Code Online (Sandbox Code Playgroud)

您实现operator+了用户定义的类型,并且编译器生成许多CPU指令来执行您编写的任务operator+.

  • @Nawaz无论如何,您的原始答案仅对一台特定的机器(和编译器)有效:-).我使用过`operator +(float,float)`生成函数调用的机器. (3认同)
  • @James:13.6说,"内置运算符只接受具有非类型类型的操作数,并且仅当操作数表达式最初具有类或枚举类型时才会发生运算符重载解析".所有这些重载都用于处理对转换为算术类型的用户定义类型的算术.这并不是说编译器*不能在内部使用它们来弄清楚`char + char`或`int + int`,但标准并没有说它确实如此.内置类型的算法在关于表达式的章节中定义,即指定要应用的促销和转换. (2认同)