我有以下程序:
#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;
}
f返回的arr[index]
是否被认为是悬空引用?
我不认为这是一个悬空引用,因为arr
对象即使在f
返回后仍然存在(所以引用是有效的),但是我想确认我的理解。我用-fsanitize=undefined
编译了这个引用,它编译得很好,产生了预期的输出。
1条答案
按热度按时间5n0oy7gb1#
不,
arr
和g
具有相同的生存期,因此没有悬空引用。但是请注意,您 * 可以 * 轻松地用函数创建悬空引用: