<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                c++11新特性——decltype decltype是C++11添加的一個新的關鍵字,目的是選擇并返回操作數的數據類型,重要的是,在此過程中編譯器分析表達式并得到它的類型,卻不實際計算表達式的值。 對于內置類型的對象,使用decltype很直觀,但當參數為復合類型的時候就應該注意一些使用細節問題。 1.當decltype作用于數組的時候就應該小心了,本文作者(CSDN?? iaccepted)。 ~~~ intiarr[10] = {0}; decltype(iarr)ib; ~~~ 這個時候ib的定義等價于 int ib[10];兩者是一樣的,不要認為ib是一個指針了,它是一個正宗的數組。我們可以驗證一下: ~~~ cout<< sizeof(ib) << endl; ~~~ 如果ib是10個元素數組的指針很明顯將輸出4,但是如果ib表示數組類型則會輸出4*10 = 40.這地方完全類似于原有的typedef關鍵字。 ? ? ? ? ~~~ typedefint iarr[10]; iarrib; //跟這里的decltype(iarr) ib是一樣的功能。 ~~~ 2.就是因為上述的這個細節,在寫函數返回值的時候就要注意類型問題。 ~~~ decltype(iarr)function(){ //本文作者(CSDN iaccepted) return***; } ~~~ 上述的語句就是錯誤的,因為很明顯decltype(iarr) 表示以數組作為返回值,這在c++中是不允許的。 ~~~ intia[3]; intiaa[][3] = { { 0 }, { 1 }, { 2 }, { 3 }, { 4 } }; intiab[][3] = { { 1 }, { 2 }, { 3 }, { 4 }, { 5 } }; ~~~ 這時候我們寫個函數通過參數決定是使用iaa數組還是iab數組,也就是返回值要返回哪個數組首地址,要返回二維數組的首地址當然有多種寫法,這里主要說一下使用decltype的注意點。 ? ? ? ? ~~~ decltype(ia)*function(int index){ if (index == 1)returniaa; elsereturn iab; }//本文作者(CSDN iaccepted 凌風) ~~~ 這樣就能實現,decltype(ia)返回一個數組類型,該類型為指向一個有三個整形元素的數組,所以decltype(ia) * 就能表示一個指向數組元素的指針,即該指針指向一個數組,數組內的每個元素又是包含三個整數的數組元素。以上面的例子來說,函數的返回值若記為p,則p指向iaa[0]而p+1則指向iaa[1],*p 為iaa[0][0]的地址 *p + 1 為iaa[0][1]的地址,這里就說多了,因為這就是普通指針的特性,ok。 3.當decltype參數為指針的解引用的話就要注意了,此時返回引用類型而不是解引用后的類型。 ? ? ? ? ~~~ intia[3] = { 1, 2, 3 };//本文作者(CSDN iaccepted 凌風) ~~~ ??????? decltype(*ia)b; //這就會出錯,因為此時b是一個指向整形變量的引用,而引用必須在定義的時候初始化。 這里為什么返回引用其實很好理解,因為*ia就是當前指針所指對象的一個引用,因為我們可以直接給*ia賦值來改變ia所指對象的值,比如 ? ? ? ? ~~~ *ia= 5; ~~~ 此時ia[0] 就變成5. 同理 ? ? ?? ~~~ decltype(ia[1])b; //也是錯誤的,因為b為一個引用必須初始化。 //本文作者(CSDN iaccepted 凌風) ~~~ 好了,暫時就想到這么多,先寫到這吧 本文作者:CSDN?? iaccepted ?凌風,博客地址:[http://blog.csdn.net/iaccepted](http://blog.csdn.net/iaccepted)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看