首页 > 解决方案 > 运算符函数是否也会导致函数开销

问题描述

foo()根据我的理解,当我们调用像程序控制这样的非内联函数时,将转移到被调用函数地址,然后存储调用者的位置并将银行返回给调用者,以在前一个函数类之后的另一条语句中。但是,当我使用运算符定义实现类时,会发生相同的过程还是会发生有利于运算符函数的不同事情?

标签: c++functionoperator-overloading

解决方案


运算符重载只是一个具有特殊名称的函数。
编译器将运算符的使用转换为函数调用。

也就是说,a + b变为a.operator+(b)operator+(a, b),具体取决于重载的定义方式。
(你也可以自己写出来,它的行为完全一样,但没有抓住重点。)

请注意,函数调用开销是我在这个千年中没有看到任何人担心的事情。在相当现代的机器上只需要几纳秒,除非你制作非常昂贵的参数副本——但是你摆脱了复制,而不是函数。

您很可能永远不会遇到摆脱函数调用是您最优先考虑的速度优化的情况。

函数调用在对时间非常敏感的情况下可能很重要,例如在紧密循环中,但这些情况很少见。
(而开销不是函数调用本身,而是由后期绑定引起的。)


推荐阅读