clang不会为“返回对本地对象的引用”生成警告”

问题描述 投票:0回答:1

我有以下代码:

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)都没有为该代码生成警告。.这是静态分析的问题吗?跟随一个指针,这样就知道该指向或不返回悬挂参考?

c++ reference clang clion clang-tidy
1个回答
0
投票

您不返回对局部变量的引用。您正在返回对p所指向内容的引用(在本例中,该值是[[is一个局部变量,但静态分析没有看到它)。

如果将功能更改为

int *&F(int **x) { int **p = x; (*p) = (*p) - 1; return *p; }

(将参数更改为int **而不是int *),那么问题(如果有的话)根本不在此函数中,而是由调用者返回。
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.