为什么我在函数中使用引用并通过引用返回它仍然有效?

Why I use reference inside the function and return it by reference still work?

本文关键字:引用 返回 有效 函数 为什么      更新时间:2023-10-16

我知道函数中局部变量的生存期将在函数完成后结束。但是我找到了下面显示的示例,它可以工作。

int & foo()
{
int b = 5;
int &a = b;
return a;
}

int main()
{
int &c = foo();
cout<<c;
return 0;
}

另外,我尝试使用指针指向局部变量并返回指针。它也可以工作。

int * foo(){
int b = 5;
int *a = &b;
return a;
}

int main()
{
int *c = foo();
cout<<*c;
return 0;
}

我很困惑。我了解到局部变量的生存期将在函数完成后结束,因为局部变量存储在堆栈内存中。这意味着局部变量的内存将在函数完成后释放。然后,指针或引用将不指向任何内容。

但是,上面的两个例子验证了我的概念是错误的。原因是什么?

您的观察称为未定义行为:该语言不会对程序的行为施加任何限制。未定义行为的可能表现之一是事物看起来"有效"。

但是您不希望程序中有任何未定义的行为。不要使用该结构,即使它们看起来有效。