我有以下代码:
int *&F(int *x) {
int **p = &x;
(*p) = (*p) - 1;
return *p;
}
int main() {
int A[] = {0, 1, 2, 3, 4}, *y = A + 2, *&q = F(y);
cout << *q << ' ' << *y << endl;
}
现在,我可以看到我们返回了x
的引用,但是clang和Clion(使用cland-tidy)都没有为该代码生成警告。.这是静态分析的问题吗?跟随一个指针,这样就知道该指向或不返回悬挂参考?
您不返回对局部变量的引用。您正在返回对p
所指向内容的引用(在本例中,该值是[[is一个局部变量,但静态分析没有看到它)。
int *&F(int **x) {
int **p = x;
(*p) = (*p) - 1;
return *p;
}
(将参数更改为int **
而不是int *
),那么问题(如果有的话)根本不在此函数中,而是由调用者返回。