一、概述
在 C++ 中,函数返回值当引用(即返回引用)是一个常见的编程技巧。它可以让你返回一个函数内部的局部变量或对象的引用,从而避免不必要的拷贝开销,尤其是在处理较大对象时可以提高性能。然而,使用返回引用时需要非常小心,因为不恰当地返回引用可能会导致未定义行为,特别是当返回局部变量的引用时。
二、返回值当引用的基本语法
在 C++ 中,可以通过 & 在函数的返回类型中声明返回引用。
int& foo() {
static int x = 10; // 静态变量
return x; // 返回 x 的引用
}
这个函数返回 x 的引用,而不是 x 的副本。
三、返回局部变量的引用
1. 不可返回局部变量的引用
如果一个函数返回的是局部变量的引用,这通常会引发未定义行为。因为局部变量在函数调用结束后会被销毁,返回的引用指向一个已经被销毁的内存位置。访问它将导致不可预测的后果。
int& foo() {
int x = 10; // 局部变量
return x; // 错误:返回局部变量的引用
}
int main() {
int& ref = foo(); // 未定义行为
std::cout << ref; // 使用已被销毁的内存
}
在这个例子中,x 是局部变量,当 foo 函数结束时,x 会被销毁