C decltype型別指示符

2021-07-02 21:07:27 字數 1366 閱讀 6456

有些情況下,我們希望從表示式的型別推斷出要定義的變數的型別,但是不想用該表示式的值初始化變數。此時就要用到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型別說明符

decltype 語法為 decltype expression 編譯器使用下列規則來確定expression int var const int fx struct a const a a new a 語句型別注釋 decltype fx const int 對左值引用的const int dec...

C decltype型別說明符

decltype 語法為 decltype expression 編譯器使用下列規則來確定expression int var const int fx struct a const a a new a 語句型別 注釋decltype fx const int 對左值引用的const int dec...

Decltype型別指示符

有時候遇到這種情況 希望從表示式的型別推斷出要定義的變數的型別,但是不想用該表示式的值初始化變數。為了滿足這一要求,c 11新標準引入了第二種型別說明符decltype,它的作用是選擇並返回運算元的資料型別。在此過程中,編譯器分析表示式並得到它的型別,卻不實際計算表示式的值 decltype f s...