You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请问以下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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 00:35:35