【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&

举例:

cpp 复制代码
// 推荐写法:
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& 没有性能优势,反而可能引入微小的间接访问开销。

相关推荐
重启的码农2 分钟前
ggml介绍 (9) 后端调度器 (ggml_backend_sched)
c++·人工智能·神经网络
Sammyyyyy1 小时前
2025年,Javascript后端应该用 Bun、Node.js 还是 Deno?
开发语言·javascript·node.js
汉汉汉汉汉2 小时前
C++11新特性详解:从列表初始化到线程库
c++
丑小鸭是白天鹅2 小时前
嵌入式C语言学习笔记之枚举、联合体
c语言·笔记·学习
William一直在路上2 小时前
Python数据类型转换详解:从基础到实践
开发语言·python
看到我,请让我去学习2 小时前
Qt— 布局综合项目(Splitter,Stacked,Dock)
开发语言·qt
GUET_一路向前2 小时前
【C语言防御性编程】if条件常量在前,变量在后
c语言·开发语言·if-else·防御性编程
曳渔2 小时前
UDP/TCP套接字编程简单实战指南
java·开发语言·网络·网络协议·tcp/ip·udp
楼田莉子3 小时前
C++算法题目分享:二叉搜索树相关的习题
数据结构·c++·学习·算法·leetcode·面试
三千道应用题3 小时前
WPF&C#超市管理系统(6)订单详情、顾客注册、商品销售排行查询和库存提示、LiveChat报表
开发语言·c#·wpf