Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables 通过ref works返回局部变量 看看这个C++代码: #include <iostream> using namespace std; class B{ public: int& f() { int local_n = 447; return local_n ; } // local_n gets out of scope here }; int main() { B b; int n = b.f(); // and now n = 447 } #包括 使用名称空间std; B类{ 公众: int&f(){ int local_n=447; 返回本地\u n; }//本地\n超出了此处的范围 }; int main() { B B; int n=b.f();//现在n=447 }_Variables_Reference_Return_Local - Fatal编程技术网

Variables 通过ref works返回局部变量 看看这个C++代码: #include <iostream> using namespace std; class B{ public: int& f() { int local_n = 447; return local_n ; } // local_n gets out of scope here }; int main() { B b; int n = b.f(); // and now n = 447 } #包括 使用名称空间std; B类{ 公众: int&f(){ int local_n=447; 返回本地\u n; }//本地\n超出了此处的范围 }; int main() { B B; int n=b.f();//现在n=447 }

Variables 通过ref works返回局部变量 看看这个C++代码: #include <iostream> using namespace std; class B{ public: int& f() { int local_n = 447; return local_n ; } // local_n gets out of scope here }; int main() { B b; int n = b.f(); // and now n = 447 } #包括 使用名称空间std; B类{ 公众: int&f(){ int local_n=447; 返回本地\u n; }//本地\n超出了此处的范围 }; int main() { B B; int n=b.f();//现在n=447 },variables,reference,return,local,Variables,Reference,Return,Local,我不明白为什么在main的末尾n=447,因为我试图返回一个对local_n的引用,而这个引用应该为NULL 返回对局部变量的引用会调用未定义的行为-这意味着您可能会很幸运,而且它可能会工作。。。有时。。。或者它可以格式化你的硬盘或者召唤鼻魔。在本例中,编译器生成的代码成功地将旧值从堆栈中复制出来,然后再被其他内容覆盖。哦,引用没有相应的空值 编辑-下面是一个示例,返回引用是一件坏事。在上面的示例中,由于您在调用任何其他内容之前立即从引用中复制了该值,因此它很有可能(但远不能保证)在大多数情况下

我不明白为什么在main的末尾n=447,因为我试图返回一个对local_n的引用,而这个引用应该为NULL

返回对局部变量的引用会调用未定义的行为-这意味着您可能会很幸运,而且它可能会工作。。。有时。。。或者它可以格式化你的硬盘或者召唤鼻魔。在本例中,编译器生成的代码成功地将旧值从堆栈中复制出来,然后再被其他内容覆盖。哦,引用没有相应的空值

编辑-下面是一个示例,返回引用是一件坏事。在上面的示例中,由于您在调用任何其他内容之前立即从引用中复制了该值,因此它很有可能(但远不能保证)在大多数情况下都能工作。但是,如果将另一个引用绑定到返回的引用,情况就不会这么好了:

extern void call_some_other_functions();
extern void lucky();
extern void oops();

int& foo()
{ int bar = 0;
  return bar;
}

main()
{ int& x = foo();
  x = 5;
  call_some_other_functions();
  if (x == 5)
    lucky();
  else
    oops();
}

我只是想给自己举个例子,为什么通过引用返回局部变量不是一个好主意。返回的值只是本地\u n?我怎样才能做出一个好的例子呢?好吧,如果它是未定义的行为这一事实还不足以成为一个不好的想法,那么你可能需要一个更复杂的例子来强化这个想法……我不明白为什么在我的例子中,local_n的值被复制掉了,而在你的例子中,它没有。这仅仅是因为在您的示例中,堆栈中还有其他值吗?因为您说
int n=b.f()
。调用函数,返回引用,然后,由于
n
不是引用,存储在引用中的值被复制出来并放入
n
中。我的示例中的不同之处在于,返回的引用绑定到另一个引用,而不是分配给非引用。