请问以下C++程序中返回的arr[index]是否属于悬垂引用?
问题解答
你的理解完全正确,函数f返回的arr[index]不是悬垂引用。
原因如下:
- 函数
f的参数是数组的引用(int_arr&等价于int(&)[3]),传入的是main函数中声明的局部数组arr,这个数组的生命周期覆盖整个main函数的执行过程。 f返回的是该数组中指定下标的元素引用,由于原数组在f返回后仍然存在,引用指向的对象始终处于有效生命周期内,因此不存在悬垂引用的问题。
你用-fsanitize=undefined编译运行程序未检测出问题,也能佐证这一点——这个编译选项会对未定义行为(包括悬垂引用的非法访问)进行检测,程序正常输出说明确实不存在这类问题。
附你提供的代码:
#include <iostream> #include <string> using namespace std; using int_arr = int[3]; int& f(int_arr& arr, int index) { return arr[index]; } int main() { int arr[3] = {1, 2, 3}; int& g = f(arr, 0); g = 5; std::cout << arr[0] << std::endl; }
内容的提问来源于stack exchange,提问作者ktqq99
相关产品推荐
相关产品推荐

