1、decltype介紹
decltype(declare type,宣告型別)為c++11 新增的關鍵字,和auto功能一樣,用於在編譯期間進行自動型別推導。
auto和decltype關鍵字都可以自動推導出變數的型別,但他們的用法是有區別的:
auto varname = value;
decltype(exp) varname = value;
auto
會根據=
右邊的初始值value推導出變數的型別,而decltype會根據exp表示式推導出變數的型別,跟=
右邊的value沒有關係。
此外,auto會要求變數必須初始化,而decltype不要求;
ps:exp 注意事項
原則上講,exp 就是乙個普通的表示式,它可以是任意複雜的形式,但是我們必須要保證 exp 的結果是有型別的,不能是 void;舉例:
int a = 0;
decltype(a) b = 1; //b 被推導成了 int
decltype(10.8) x = 5.5; //x 被推導成了 double
decltype(x + 100) y; //y 被推導成了 double
2、decltype推導規則
使用 decltype(exp) 獲取型別時,編譯器將根據以下三條規則得出結果:
左值是指那些在表示式執行結束後依然存在的資料,也就是永續性的資料;右值是指那些在表示式執行結束後不再存在的資料,也就是臨時性的資料。有一種很簡單的方法來區分左值和右值,對表示式取位址,如果編譯器不報錯就為左值,否則為右值。
參考:
C decltype型別指示符
有些情況下,我們希望從表示式的型別推斷出要定義的變數的型別,但是不想用該表示式的值初始化變數。此時就要用到c 11引入的第二種型別說明符delctype,它的作用就是選擇並返回運算元的資料型別。編譯器分析表示式並得到它的型別,但不實際計算表示式的值 decltype size 5 s i declt...
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...