当前位置: 首页 > news >正文

【C/C++】long long 类型传参推荐方式

在 C++ 中,对于 long long 类型的函数入参,选择 long long val 还是 const long long& val,主要取决于参数的大小是否需要避免复制开销

一句话总结:

对于内置类型如 long long直接传值(long long val)效率通常更高或至少一样好,推荐使用传值方式。


原因分析:

参数类型开销说明
long long val直接值传递,拷贝 8 字节编译器会将其压入寄存器(如 x64 架构中使用寄存器传参),效率高,调用代码清晰。
const long long& val传递引用(实际上是一个指针),加一次间接访问虽然避免了拷贝,但增加了一次指针解引用操作,可能会引起缓存命中率下降。

什么时候使用 const long long&

  • 当参数是大型对象(例如:std::string, std::vector, 自定义类等),为了避免拷贝开销。
  • 当你希望保持函数签名一致性(例如模板中统一使用引用传递)。
  • 当你明确要保持引用语义时(例如用于调试、或借助引用避免拷贝构造/移动构造等情况)。

实际建议:

参数类型推荐传参方式
内置类型(如 int, long long, double 等)传值
大型对象或资源类(如 std::string, std::vector, 自定义类)const T&

举例:

// 推荐写法:
void process(long long val); // ✅void process(const long long& val); // ⛔️ 通常没必要

编译器优化提示:

现代编译器(如 GCC、Clang、MSVC)会对小对象传值做大量优化,例如传寄存器而不是内存指针,避免不必要的间接访问。对于 64-bit 架构,long long 正好是 8 字节,不会有性能瓶颈。


总结:

✅ 对于 long long,使用 long long val 是更自然、高效的选择。使用 const long long& 没有性能优势,反而可能引入微小的间接访问开销。

相关文章:

  • MoonBit Pearls Vol.01:使用MoonBit编写Pratt解析器
  • Kafka消费者组位移重设指南
  • MySQL之事务与视图
  • CKA考试知识点分享(9)---gateway api
  • 【Unity踩坑】Unity 6在Mac平台编译运行时去除‘trial version‘
  • Java并发编程实战 Day 18:线程池深度剖析与自定义实现
  • 线程(下)【Linux操作系统】
  • 蓝凌的低门槛、可扩展的可视化公式引擎
  • 【源码】研学报名小程序开发功能分析案例
  • AUTOSAR实战教程--DoIP_03_ 代码分析与调用栈观测(ISOLAR版)
  • 「日立涡旋压缩机」携手企企通,打造AI数智供应链协同新范式
  • Object.defineProperty()详解
  • 智谱的AI Agent :CoCo
  • 快速了解JVM的GC历史
  • 国产linux系统(银河麒麟,统信uos)使用 PageOffice实现word 文档中的table插入新行并赋值
  • 文件加密软件推荐,2025文档加密系统的最新排名
  • EtherCAT至TCP/IP异构网络互联:施耐德M580 PLC对接倍福CX5140解决方案
  • HTML原生日期插件增加周次显示
  • 审计效率升级!Word一键批量给数字添加千位分隔符
  • 科技评论:Jim Keller 的“反向”战略:RISC-V 成为中国应对美国芯片封锁的关键武器
  • 网站 被攻击_主业篡改 被黑了 织梦做的站/百度自动优化
  • 网站开发项目中的rd/厦门百度关键词推广
  • 代理龙华网站建设/网站建设推广服务
  • wordpress 超级卡/重庆百度关键词优化软件
  • 做网站先做前台还是后台/360搜索引擎下载
  • 网站开发和软件开发工作/百度首页纯净版