You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行时速度对比:指针多次调用类成员方法与声明变量哪个更快

两段代码的运行速度对比分析

核心结论:绝大多数场景下,案例2的速度不会比案例1慢,甚至可能更快,具体差异取决于MyClass::getLine()的实现逻辑:

情况1:getLine()返回缓存的字符串引用

如果getLine()的实现是直接返回类内部已有的std::string成员的引用(比如const std::string& getLine() const { return m_line; }),那么:

  • 案例1会三次调用getLine(),但每次只是获取一个引用,没有额外的字符串拷贝或内存分配,开销极低。
  • 案例2会调用一次getLine()并拷贝字符串到临时变量line,后续三次传递的是这个变量的引用(假设doSomething系列函数的参数是const std::string&),开销主要是一次字符串拷贝。
    这种场景下两者的性能差异几乎可以忽略,案例1可能略快,但优势极小。

情况2:getLine()每次调用都会生成新字符串

如果getLine()的实现是每次调用都动态生成新的字符串(比如读取文件行、拼接动态内容,返回值是std::string而非引用),那么:

  • 案例1会三次调用getLine(),意味着三次字符串的创建、内存分配和销毁,总开销是案例2的三倍左右。
  • 案例2只调用一次getLine(),后续复用同一个字符串对象,开销远低于案例1,这种场景下案例2的速度优势非常明显。

额外建议:优先选择案例2的原因

除了性能层面的优势(或无劣势),案例2的代码还具备以下优点:

  • 可读性更强:明确表达三次操作复用同一份字符串内容,逻辑更清晰。
  • 避免潜在bug:如果getLine()的返回值会随外部状态变化(比如每次调用读取下一行文件),案例1的三次调用会得到不同结果,而案例2能确保三次操作使用的是同一内容,符合代码的直观预期。

内容的提问来源于stack exchange,提问作者Mikel Grenlou

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 07:45:38