[C++] decltype類型指示符

來源:互聯網
上載者:User

標籤:c++   c++11   

有些情況下,我們希望從運算式的類型推斷出要定義的變數的類型,但是不想用該運算式的值初始設定變數。此時就要用到C++11引入的第二種類型說明符delctype,它的作用就是選擇並返回運算元的資料類型。編譯器分析運算式並得到它的類型,但不實際計算運算式的值:

    decltype (size(5)) s = i;‘    decltype返回size函數傳回值的類型,來聲明變數s。

decltype處理頂層const和引用的方式和auto有所不同,如果decltype使用的運算式是一個變數,則decltype返回該變數的類型,包括頂層const和引用。

    const int ci = 0, &cj = ci;    decltype(ci) x = 0;             // x的類型是const int    decltype(cj) y = x;             // y的類型是const int&, y綁定到x    decltype(cj) z;                 // error, z是一個引用,必須初始化

如果decltype使用的運算式不是一個變數,則decltype返回運算式結果對應的類型。有些運算式向decltype返回一個參考型別,這就意味著該運算式的結果對象能作為一條指派陳述式的左值。

    int i = 42, *p = &i, &r = i;    decltype(r + 0) b;                  // 加法的結果是int, b的類型就是int    decltype(*p) c;                     // error, c為int &

因為r是一個引用,decltype(r)的結果是參考型別,要想得到int類型就將r作為運算式的一部分,比如r+0。
如果運算式的內容是解引用操作,則decltype將得到參考型別。
對decltype所用的運算式來說,如果變數加上一對括弧,則得到的類型與不加括弧時會有不同。加上括弧編譯器就把它當成一個運算式,而不加括弧則直接返回變數的類型。

    decltype((i)) d;                    // error, decltype的運算式如果是加上了括弧的變數,結果為引用    decltype(i) e;                      // e是一個未初始化的int

賦值會產生引用,引用的類型就是左值的類型,如果i是int,i = x的類型就是int&:

    int a = 3, b = 4;    decltype(a) c = a;    decltype(a = b) d = a;

[C++] 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.