返回引用可使函数调用出现在赋值左侧,直接修改原始数据,语法为返回类型& 函数名,适用于避免大对象拷贝、实现链式调用等场景。

在C++中,使用引用作为函数返回值可以让函数调用出现在赋值操作的左边,直接修改原始数据,而不是返回一个副本。这种方式常用于操作类的成员变量或重载运算符。关键在于理解何时可以安全返回引用,以及如何避免常见错误。
返回引用的基本语法
函数返回引用的语法是在返回类型前加上&符号:
返回类型& 函数名(参数列表) {
return 某个变量;
}
例如:
int& getValue(int index) {
static int arr[10];
return arr[index]; // 返回对数组元素的引用
}
这样调用时可以直接赋值:
立即学习“C++免费学习笔记(深入)”;
getValue(2) = 42; // 直接修改arr[2]
适用场景和注意事项
返回引用主要用于以下情况:
Android文档-开发者指南-第一部分:入门-中英文对照版 Android提供了丰富的应用程序框架,它允许您在Java语言环境中构建移动设备的创新应用程序和游戏。在左侧导航中列出的文档提供了有关如何使用Android的各种API来构建应用程序的详细信息。第一部分:Introduction(入门) 0、Introduction to Android(引进到Android) 1、Application Fundamentals(应用程序基础) 2、Device Compatibility(设备兼容性) 3、
- 避免拷贝大对象:返回容器或自定义类的引用,减少性能开销
- 实现链式调用:如ostream的
- 重载赋值或下标操作符:operator[]通常返回引用以便读写元素
但必须确保返回的引用所指向的对象在函数结束后仍然有效:
- 不要返回局部变量的引用(生命周期结束于函数返回)
- 可以返回静态变量、全局变量或传入参数的引用
- 成员函数可返回类内部成员变量的引用(前提是对象本身有效)
常见错误示例
以下代码是危险的:
int& badFunction() {
int x = 10;
return x; // 错误:返回局部变量引用
}
调用这个函数会引发未定义行为,因为x在函数结束时已被销毁。
实际应用:重载下标操作符
在自定义数组类中,通常这样实现:
class MyArray {
int data[100];
public:
int& operator[](int index) {
return data[index]; // 允许读写
}
const int& operator[](int index) const {
return data[index]; // const版本用于只读访问
}
};
这样就能像普通数组一样使用:
MyArray arr; arr[0] = 5; // 调用非const版本 int x = arr[0]; // 调用const版本基本上就这些。只要注意生命周期问题,引用返回值是高效且常用的C++技巧。









