<small id='JiLHp'></small><noframes id='JiLHp'>

  • <legend id='JiLHp'><style id='JiLHp'><dir id='JiLHp'><q id='JiLHp'></q></dir></style></legend>
      <i id='JiLHp'><tr id='JiLHp'><dt id='JiLHp'><q id='JiLHp'><span id='JiLHp'><b id='JiLHp'><form id='JiLHp'><ins id='JiLHp'></ins><ul id='JiLHp'></ul><sub id='JiLHp'></sub></form><legend id='JiLHp'></legend><bdo id='JiLHp'><pre id='JiLHp'><center id='JiLHp'></center></pre></bdo></b><th id='JiLHp'></th></span></q></dt></tr></i><div id='JiLHp'><tfoot id='JiLHp'></tfoot><dl id='JiLHp'><fieldset id='JiLHp'></fieldset></dl></div>

      <tfoot id='JiLHp'></tfoot>
      • <bdo id='JiLHp'></bdo><ul id='JiLHp'></ul>

      1. 什么是悬空引用?

        What is a dangling reference?(什么是悬空引用?)
          <tbody id='YfWih'></tbody>

        <legend id='YfWih'><style id='YfWih'><dir id='YfWih'><q id='YfWih'></q></dir></style></legend>

          • <tfoot id='YfWih'></tfoot>
          • <i id='YfWih'><tr id='YfWih'><dt id='YfWih'><q id='YfWih'><span id='YfWih'><b id='YfWih'><form id='YfWih'><ins id='YfWih'></ins><ul id='YfWih'></ul><sub id='YfWih'></sub></form><legend id='YfWih'></legend><bdo id='YfWih'><pre id='YfWih'><center id='YfWih'></center></pre></bdo></b><th id='YfWih'></th></span></q></dt></tr></i><div id='YfWih'><tfoot id='YfWih'></tfoot><dl id='YfWih'><fieldset id='YfWih'></fieldset></dl></div>

                • <bdo id='YfWih'></bdo><ul id='YfWih'></ul>

                  <small id='YfWih'></small><noframes id='YfWih'>

                  本文介绍了什么是悬空引用?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  以下程序给我运行时错误(Segmentation Fault (SIGSEGV)).

                  Following program give me runtime error(Segmentation Fault (SIGSEGV)).

                  #include <iostream>
                  using namespace std;
                  
                  int& bar()
                  {
                      int n = 10;
                      return n;
                  }
                  
                  int main() {
                      int& i = bar();
                      cout<<i<<endl;
                      return 0;
                  }
                  

                  我的老师告诉我这是一个未定义的行为,因为悬空引用.他说得对吗?如果是,那么如何避免它?

                  My teacher told me it is a undefined behavior because dangling reference. Is he right? If yes then how to avoid it?

                  推荐答案

                  是的,这确实是一个未定义的行为,因为您正在返回对自动变量的引用,该变量将在执行 bar() 时被销毁完成

                  Yes it is indeed an undefined behavior because you are returning a reference to automatic variable which will be destroyed when execution of bar() completes

                  你可以通过写来避免它:

                  You can avoid it by writing:

                  #include <iostream>
                  using namespace std;
                  
                  int& bar()
                  {
                      static int n = 10;
                      return n;
                  }
                  
                  int main() {
                      int& i = bar();
                      cout<<i<<endl;
                      return 0;
                  }
                  

                  在这种情况下,静态变量 nbar() 执行完成时不会被销毁,它会在您的程序终止时被销毁.

                  In this case static variable n will not be destroyed when execution of bar() completes, it will be destroyed when your program terminates.

                  这篇关于什么是悬空引用?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                  相关文档推荐

                  C++ stl unordered_map implementation, reference validity(C++ stl unordered_map 实现,参考有效性)
                  C++: Is it possible to use a reference as the value in a map?(C++:是否可以使用引用作为映射中的值?)
                  Where ampersand quot;amp;quot; can be put when passing argument by reference?(其中符号“amp;通过引用传递参数时可以放置吗?)
                  Why can a non-const reference parameter be bound to a temporary object?(为什么可以将非常量引用参数绑定到临时对象?)
                  C++ reference changes when push_back new element to std::vector(当 push_back 新元素到 std::vector 时,C++ 引用发生变化)
                  Why does std::forward have two overloads?(为什么 std::forward 有两个重载?)

                    <tfoot id='nZhp1'></tfoot>

                    <i id='nZhp1'><tr id='nZhp1'><dt id='nZhp1'><q id='nZhp1'><span id='nZhp1'><b id='nZhp1'><form id='nZhp1'><ins id='nZhp1'></ins><ul id='nZhp1'></ul><sub id='nZhp1'></sub></form><legend id='nZhp1'></legend><bdo id='nZhp1'><pre id='nZhp1'><center id='nZhp1'></center></pre></bdo></b><th id='nZhp1'></th></span></q></dt></tr></i><div id='nZhp1'><tfoot id='nZhp1'></tfoot><dl id='nZhp1'><fieldset id='nZhp1'></fieldset></dl></div>

                        <small id='nZhp1'></small><noframes id='nZhp1'>

                        • <bdo id='nZhp1'></bdo><ul id='nZhp1'></ul>
                            <tbody id='nZhp1'></tbody>
                          <legend id='nZhp1'><style id='nZhp1'><dir id='nZhp1'><q id='nZhp1'></q></dir></style></legend>