为什么我在函数中使用引用并通过引用返回它仍然有效?
Why I use reference inside the function and return it by reference still work?
我知道函数中局部变量的生存期将在函数完成后结束。但是我找到了下面显示的示例,它可以工作。
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;
}
我很困惑。我了解到局部变量的生存期将在函数完成后结束,因为局部变量存储在堆栈内存中。这意味着局部变量的内存将在函数完成后释放。然后,指针或引用将不指向任何内容。
但是,上面的两个例子验证了我的概念是错误的。原因是什么?
您的观察称为未定义行为:该语言不会对程序的行为施加任何限制。未定义行为的可能表现之一是事物看起来"有效"。
但是您不希望程序中有任何未定义的行为。不要使用该结构,即使它们看起来有效。
相关文章:
- 如何通过引用返回对象
- 函数如何使用引用返回所需的数字?
- 如何防止引用返回的私有结构的突变
- 如何在不使用临时变量的情况下取消引用返回指针的函数的返回值?
- 通过引用返回的变量的范围
- 对于具有引用返回类型的搜索算法,默认返回值应该是什么?
- 运算符重载C++类中的引用返回
- C++对象引用返回不同的值
- 解释通过从函数引用返回数组的语法
- 具有引用返回类型的重写方法上的协变返回类型无效
- 为什么在通过引用返回运算符分配时取消引用'this'指针?
- 为什么我在函数中使用引用并通过引用返回它仍然有效?
- 直接在 C++ 中将值分配给引用返回类型
- C++当您取消引用指向类对象的指针,然后将其作为引用返回时,是否可以对此引用调用方法
- 可以通过常量引用返回默认参数的值吗?
- 按值与右值引用返回
- 非常量引用返回函数在常量值返回函数上用作 r 值
- 当我使用按引用返回时,我不知道这些代码之间的区别
- 为什么通过引用返回向量比通过移动返回要快得多?
- 通过引用返回包含对象的向量