關注C++細節——C++11新標準之decltype的使用注意

來源:互聯網
上載者:User

標籤:作者   pre   nbsp   計算   style   art   code   特性   二維數組   

c++11新特性——decltype

 

decltype是C++11加入的一個新的keyword,目的是選擇並返回運算元的資料類型,重要的是,在此過程中編譯器分析運算式並得到它的類型,卻不實際計算運算式的值。

對於內建類型的對象。使用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.這地方全然類似於原有的typedefkeyword。

         

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 淩風)

好了。臨時就想到這麼多,先寫到這吧

 

本人新的部落格地址  淩風技術站



關注C++細節——C++11新標準之decltype的使用注意

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.