C decltype型別推導

2022-09-08 12:57:11 字數 897 閱讀 8569

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...