<tfoot id='RrQrH'></tfoot>
    <legend id='RrQrH'><style id='RrQrH'><dir id='RrQrH'><q id='RrQrH'></q></dir></style></legend>

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

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

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

      为什么这会调用默认构造函数?

      Why does this call the default constructor?(为什么这会调用默认构造函数?)

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

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

                本文介绍了为什么这会调用默认构造函数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                问题描述

                struct X
                {
                    X()    { std::cout << "X()
                ";    }
                    X(int) { std::cout << "X(int)
                "; }
                };
                
                const int answer = 42;
                
                int main()
                {
                    X(answer);
                }
                

                我原以为这会打印

                • X(int),因为 X(answer); 可以解释为从 intX,或
                • 什么都没有,因为 X(answer); 可以解释为变量的声明.
                • X(int), because X(answer); could be interpreted as a cast from int to X, or
                • nothing at all, because X(answer); could be interpreted as the declaration of a variable.

                然而,它打印X(),我不知道为什么X(answer); 将调用默认构造函数.

                However, it prints X(), and I have no idea why X(answer); would call the default constructor.

                奖励积分:我需要更改什么才能获得临时声明而不是变量声明?

                BONUS POINTS: What would I have to change to get a temporary instead of a variable declaration?

                推荐答案

                什么都没有,因为 X(answer);可以解释为变量的声明.

                nothing at all, because X(answer); could be interpreted as the declaration of a variable.

                您的答案隐藏在这里.如果你声明一个变量,你就会调用它的默认构造函数(如果是非 POD 和所有这些东西).

                Your answer is hidden in here. If you declare a variable, you invoke its default ctor (if non-POD and all that stuff).

                在您的编辑中:要获得临时文件,您有几个选择:

                On your edit: To get a temporary, you have a few options:

                • (X(answer));
                • (X)answer;
                • static_cast(答案)
                • X{answer}; (C++11)
                • []{ return X(answer);}();(C++11,可能会导致复制)
                • void(), X(answer);
                • X((void(),answer));
                • true ?X(answer) : X();
                • if(X(answer), false){}
                • for(;X(answer), false;);
                • X(+answer);

                这篇关于为什么这会调用默认构造函数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

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

                相关文档推荐

                Constructor initialization Vs assignment(构造函数初始化 Vs 赋值)
                Is a `=default` move constructor equivalent to a member-wise move constructor?(`=default` 移动构造函数是否等同于成员移动构造函数?)
                Has the new C++11 member initialization feature at declaration made initialization lists obsolete?(声明时新的 C++11 成员初始化功能是否使初始化列表过时了?)
                Order of constructor call in virtual inheritance(虚继承中构造函数调用的顺序)
                How to use sfinae for selecting constructors?(如何使用 sfinae 选择构造函数?)
                Initializing a union with a non-trivial constructor(使用非平凡的构造函数初始化联合)

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

                    <tfoot id='Ygz2g'></tfoot>

                        <tbody id='Ygz2g'></tbody>

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