优势
- 提高效率:避免了对象的拷贝构造和析构过程,对于大型对象或构造/析构开销大的对象,能显著提升性能。例如传递一个包含大量数据成员的自定义类对象。
- 保护数据:防止函数内部意外修改传入的参数值,保证数据的完整性和安全性。
适用场景
- 读取大型数据结构:当函数只需要读取一个大型容器(如
std::vector
或std::map
)的数据时,按常量引用传递可避免拷贝。
#include <iostream>
#include <vector>
void printVector(const std::vector<int>& vec) {
for (int num : vec) {
std::cout << num << " ";
}
std::cout << std::endl;
}
- 传递自定义复杂类对象:对于自定义的复杂类,其构造和析构可能开销较大,按常量引用传递既能提高效率又能防止数据被修改。
class BigObject {
int data[10000];
public:
BigObject() {
for (int i = 0; i < 10000; ++i) {
data[i] = i;
}
}
};
void processObject(const BigObject& obj) {
// 处理obj,但不会修改它
}