从函数返回悬空引用
Returning Dangling reference from a function
我试图测试一些关于 c++ 中悬空引用的东西,并想出了以下代码
#include <iostream>
using namespace std;
int& get_int_ref() {
int var = 16991;
int &var_ref = var;
return var_ref;
}
int main() {
cout << get_int_ref() << endl;
return 0;
}
当我尝试使用 clang (clang-1000.10.44.4) 编译此程序时,我正确地收到了悬而未决的引用警告:
warning: reference to stack memory associated with local variable 'var' returned [-Wreturn-stack-address]
return var_ref;
^~~~~~~
使用 gcc(4.8 和 7.3.0),我什至没有收到警告。当我尝试运行可执行文件时,它会在所有情况下(使用所有不同的编译器)打印正确的值(而不是垃圾值)。
$ ./a.out
16991
显然,我在这里缺少一些东西。你会同意我不应该这样做吗,有人可以指出这里的问题是什么吗?
它打印正确的值(而不是垃圾值)
不。它打印垃圾值。悬空引用没有正确的值。
显然,我在这里缺少一些东西。
你缺少的是行为是未定义的。
将其打印两次将覆盖原始值。你知道为什么会这样吗?
发生这种情况是因为行为未定义。
相关文章:
- 如何通过引用返回对象
- 函数如何使用引用返回所需的数字?
- 如何防止引用返回的私有结构的突变
- 如何在不使用临时变量的情况下取消引用返回指针的函数的返回值?
- 通过引用返回的变量的范围
- 对于具有引用返回类型的搜索算法,默认返回值应该是什么?
- 运算符重载C++类中的引用返回
- C++对象引用返回不同的值
- 解释通过从函数引用返回数组的语法
- 具有引用返回类型的重写方法上的协变返回类型无效
- 为什么在通过引用返回运算符分配时取消引用'this'指针?
- 为什么我在函数中使用引用并通过引用返回它仍然有效?
- 直接在 C++ 中将值分配给引用返回类型
- C++当您取消引用指向类对象的指针,然后将其作为引用返回时,是否可以对此引用调用方法
- 可以通过常量引用返回默认参数的值吗?
- 按值与右值引用返回
- 非常量引用返回函数在常量值返回函数上用作 r 值
- 当我使用按引用返回时,我不知道这些代码之间的区别
- 为什么通过引用返回向量比通过移动返回要快得多?
- 通过引用返回包含对象的向量