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

【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& 没有性能优势,反而可能引入微小的间接访问开销。

http://www.xdnf.cn/news/13480.html

相关文章:

  • asio之静态互斥量
  • 【PmHub面试篇】集成 Sentinel+OpenFeign实现网关流量控制与服务降级相关面试题解答
  • 远程io模块在汽车流水线的应用
  • 深度学习工具四剑客:Anaconda、Jupyter、PyTorch与CUDA详解
  • 达梦数据库dsc集群+异步主备
  • DeviceNet转Modbus RTU网关在玻璃制造中的关键应用
  • 如何制定兼容多个项目的整体时间计划?
  • Vue.js $emit的介绍和简单使用
  • 【leetcode-合并两个有序链表】
  • Codeforces Round 1029 (Div. 3)
  • C语言数据结构笔记6:使用宏和指针来设置和操作嵌套在结构体中的联合体数组的特定位
  • OC学习—Block初探(简易版)
  • 【实战指南】前端项目Nginx配置全流程:从打包部署到解决跨域/路由循环问题
  • 在C# 中使用建造者模式
  • 算法题(167):FBI树
  • Oracle日志体系和遇到问题后日志排查路径
  • 行为模式-责任链模式
  • 进行性核上性麻痹健康护理指南:全方位照护之道
  • Pytorch 的编程技巧
  • Java八股文——Spring「Spring 篇」
  • 5.4.2树、森林与二叉树的转换
  • 今日行情明日机会——20250611
  • Android GreenDAO 通过 Key 查询数据库数据慢问题优化
  • 13.自治系统路由计算题
  • Node.js:开启现代服务器端编程的新篇章
  • h5fortran 简介与使用指南
  • 新能源知识库(36)什么是BMU
  • 51LA数据分析遇瓶颈?免费统计工具——悟空统计
  • 大话软工笔记—工程分解
  • GlusterFS分布式文件系统