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 }
我不明白为什么在main的末尾n=447,因为我试图返回一个对local_n的引用,而这个引用应该为NULL 返回对局部变量的引用会调用未定义的行为-这意味着您可能会很幸运,而且它可能会工作。。。有时。。。或者它可以格式化你的硬盘或者召唤鼻魔。在本例中,编译器生成的代码成功地将旧值从堆栈中复制出来,然后再被其他内容覆盖。哦,引用没有相应的空值 编辑-下面是一个示例,返回引用是一件坏事。在上面的示例中,由于您在调用任何其他内容之前立即从引用中复制了该值,因此它很有可能(但远不能保证)在大多数情况下都能工作。但是,如果将另一个引用绑定到返回的引用,情况就不会这么好了: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 返回对局部变量的引用会调用未定义的行为-这意味着您可能会很幸运,而且它可能会工作。。。有时。。。或者它可以格式化你的硬盘或者召唤鼻魔。在本例中,编译器生成的代码成功地将旧值从堆栈中复制出来,然后再被其他内容覆盖。哦,引用没有相应的空值 编辑-下面是一个示例,返回引用是一件坏事。在上面的示例中,由于您在调用任何其他内容之前立即从引用中复制了该值,因此它很有可能(但远不能保证)在大多数情况下
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
中。我的示例中的不同之处在于,返回的引用绑定到另一个引用,而不是分配给非引用。