1. <tfoot id='vQbXc'></tfoot>

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

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

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

      1. <legend id='vQbXc'><style id='vQbXc'><dir id='vQbXc'><q id='vQbXc'></q></dir></style></legend>

        为什么未命名的 C++ 对象会在作用域块结束之前销毁?

        时间:2023-10-17

        1. <legend id='kV7sX'><style id='kV7sX'><dir id='kV7sX'><q id='kV7sX'></q></dir></style></legend>
              <bdo id='kV7sX'></bdo><ul id='kV7sX'></ul>

                  <tbody id='kV7sX'></tbody>

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

                  <tfoot id='kV7sX'></tfoot>
                1. <small id='kV7sX'></small><noframes id='kV7sX'>

                  本文介绍了为什么未命名的 C++ 对象会在作用域块结束之前销毁?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  以下代码打印一、二、三.所有 C++ 编译器都希望这样吗?

                  The following code prints one,two,three. Is that desired and true for all C++ compilers?

                  
                  class Foo
                  {
                        const char* m_name;
                  public:
                        Foo(const char* name) : m_name(name) {}
                        ~Foo() { printf("%s
                  ", m_name); }
                  };
                  
                  void main()
                  {
                        Foo foo("three");
                        Foo("one");   // un-named object
                        printf("two
                  ");
                  }
                  

                  推荐答案

                  一个临时变量一直存在到创建它的完整表达式的结尾.你的变量以分号结尾.

                  A temporary variable lives until the end of the full expression it was created in. Yours ends at the semicolon.

                  这是在 12.2/3:

                  This is in 12.2/3:

                  临时对象被销毁,作为评估(词汇上)包含它们创建点的完整表达式 (1.9) 的最后一步.

                  Temporary objects are destroyed as the last step in evaluating the full-expression (1.9) that (lexically) contains the point where they were created.

                  你的行为是有保证的.

                  有两个条件,如果满足,将延长临时的生命周期.第一个是当它是对象的初始值设定项时.第二种是当引用绑定到临时对象时.

                  There are two conditions that, if met, will extend the lifetime of a temporary. The first is when it's an initializer for an object. The second is when a reference binds to a temporary.

                  这篇关于为什么未命名的 C++ 对象会在作用域块结束之前销毁?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  上一篇:为什么我的 HelloWorld 函数没有在这个范围内声明? 下一篇:如何访问在另一个函数中的一个函数中定义和声明的变量?

                  相关文章

                  <tfoot id='B2Mtl'></tfoot>

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

                  1. <small id='B2Mtl'></small><noframes id='B2Mtl'>

                        <bdo id='B2Mtl'></bdo><ul id='B2Mtl'></ul>