引用的使用场景
引用用于函数参数传递、返回值优化和避免拷贝,支持别名和链式调用,简化代码效率高。
引用的使用场景
引用的使用场景
1. 函数参数传递(避免拷贝,提高效率)
当函数参数是一个大型对象(如结构体、vector、string),如果传值会产生拷贝,浪费性能:
1
2
3
void modify(string &s) { // 用引用传递,避免拷贝
s += " modified";
}
如果用:
1
void modify(string s) { ... } // 会拷贝一份 s,效率差
2. 返回引用(返回原对象,支持链式调用)
1
2
3
4
5
int& getElement(int arr[], int index) {
return arr[index]; // 返回引用,允许修改原数组
}
getElement(arr, 2) = 100; // 直接修改 arr[2]
3. 作为函数返回值的左值(链式调用)
例如实现链式调用或容器封装:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
class Counter {
int value;
public:
Counter &increment() {
++value;
return *this;
}
void print() const {
cout << value << endl;
}
};
int main() {
Counter c;
c.increment().increment().print(); // 输出 2
}
4. 范围 for 循环中避免拷贝
1
2
3
4
5
vector<int> nums = {1, 2, 3};
for (int &x: nums) { // 引用,直接修改原数组
x *= 2;
}
如果用 int x
会复制一份,无法修改原始内容。
5. 引用别名(简化复杂表达式)
1
2
3
4
5
6
7
int main() {
int a = 5;
int &b = a; // b 是 a 的别名,修改 b 就是修改 a
b = 10;
cout << a; // 输出 10
}
总结
场景 | 用法 | 优点 |
---|---|---|
大对象参数传递 | const Type ¶m | 避免拷贝 |
修改外部值 | void f(Type ¶m) | 能修改实参 |
返回引用 | Type& f() | 直接操作原始对象 |
循环遍历 | for (Type &x : container) | 原地修改容器元素 |
别名简化 | Type &alias = variable | 语义清晰 |
本文由作者按照 CC BY 4.0 进行授权