值传递复制实参生成独立副本,函数内修改不影响原变量,适用于小对象;引用传递通过别名共享内存,避免拷贝开销,可直接修改原值,提升大对象传递效率。

在C++中,值传递和引用传递是函数参数传递的两种主要方式,它们在内存使用、性能以及数据修改能力上有本质区别。
值传递:传递的是数据的副本
当使用值传递时,函数接收的是实参的一个拷贝。这意味着:
- 形参是实参的副本,存储在独立的内存空间中
- 在函数内部对形参的修改不会影响原始变量
- 适用于基本数据类型(如int、double)或小型结构体
- 每次调用都会发生拷贝,对于大对象效率较低
void func(int x) {
x = 100; // 只修改副本
}
int a = 10;
func(a);
// a 仍然是 10
引用传递:传递的是变量的别名
引用传递通过给原变量起一个“别名”的方式实现,形参和实参指向同一块内存:
- 形参是实参的引用(别名),不产生副本
- 函数内对形参的修改直接影响原始变量
- 避免了大对象拷贝,提升性能
- 常用于需要修改多个返回值或传递大型对象(如类实例)的场景
void func(int& x) {
x = 100; // 修改原变量
}
int a = 10;
func(a);
// a 变为 100
本质区别总结
核心差异在于是否创建副本和内存访问方式:
立即学习“C++免费学习笔记(深入)”;
- 值传递:复制数据 → 独立内存 → 安全但低效(尤其对大对象)
- 引用传递:共享内存 → 无复制开销 → 高效且可修改原值
- 引用本质上是编译器维护的“隐式指针”,但语法更简洁安全(无需解引用,不能为null)
- 若不想修改原值又想避免拷贝,可使用
const T&方式传递











