c++ - 运算符函数是否也会导致函数开销
问题描述
foo()
根据我的理解,当我们调用像程序控制这样的非内联函数时,将转移到被调用函数地址,然后存储调用者的位置并将银行返回给调用者,以在前一个函数类之后的另一条语句中。但是,当我使用运算符定义实现类时,会发生相同的过程还是会发生有利于运算符函数的不同事情?
解决方案
运算符重载只是一个具有特殊名称的函数。
编译器将运算符的使用转换为函数调用。
也就是说,a + b
变为a.operator+(b)
或operator+(a, b)
,具体取决于重载的定义方式。
(你也可以自己写出来,它的行为完全一样,但没有抓住重点。)
请注意,函数调用开销是我在这个千年中没有看到任何人担心的事情。在相当现代的机器上只需要几纳秒,除非你制作非常昂贵的参数副本——但是你摆脱了复制,而不是函数。
您很可能永远不会遇到摆脱函数调用是您最优先考虑的速度优化的情况。
虚函数调用在对时间非常敏感的情况下可能很重要,例如在紧密循环中,但这些情况很少见。
(而开销不是函数调用本身,而是由后期绑定引起的。)
推荐阅读
- c# - 从 xml 中删除前缀
- javascript - “菜单触发器”脚本在 IE11 中不起作用
- hyperledger-fabric - Fabric-node-js 注册不会为 msp 创建文件夹结构
- javascript - 类上的 IE11 JavaScript 语法错误,使用 Webpack 构建
- blazor - 带有 Blazorise 的 asp.net core 3.1 未使用 ValidateAll() 重置验证
- instagram - 使用 Instagram 基本显示更新用户访问令牌
- git - 如何将 commit-msg 挂钩消息返回给用户?
- javascript - 在 React 中恢复 UL LI 树
- r - 将函数应用于多个数据帧并将结果存储在唯一的数据帧中
- arrays - 访问关联数组的元素的时间如何与该数组中元素的数量无关?