通过引用返回局部变量

时间:2017-01-24 15:20:26

标签: c++ arrays vector scope static

我有以下代码:

<script>
$(document).on('click','.dropdown-menu li > a',function(){
    var value=$(this).html();
    $(this).parent().parent().parent().find('.dropdown_text').html(value);

});

</script>

调用func它没问题,因为当p是本地时* p是i,而我居住在全局范围内(?)。 调用func2返回0,这对我来说没有意义,我希望有一个分段错误,因为v是一个本地向量... 调用func3会返回正确的值,这也没有意义,原因与上面相同。 调用func4最终做了我预期的给出segatioun错误

有人可以帮我理解深层发生的事情吗?为什么向量和数组工作,因为它们被声明为静态?事实上,考虑到所有函数都返回引用,我预计会出现分段错误,因为向量和数组是本地对象,一旦函数结束就应该删除它们。

非常感谢

2 个答案:

答案 0 :(得分:5)

那里发生了未定义的行为。通过引用返回本地参数或变量是未定义的行为,与向其返回地址的方式相同。

答案 1 :(得分:1)

如果您希望或必须返回引用,请使用静态变量:

int& my_func(int variable)
{
  static int some_value = 0;
  some_value = variable;
  return some_value;
}

关键字static告诉编译器该变量在执行后离开函数时将具有生命周期。

要返回引用,您需要引用到一个变量,该变量在执行后不会消失。