decltype關鍵字
阿新 • • 發佈:2017-05-05
有時 fun 表達 括號 函數重載 字面值 使用 i++ tro
- decltype用於編譯時類型推導,是以一個普通表達式作為參數,返回該表達式的類型,而且decltype並不會對表達式進行求值。
- decltype的用法:
1 //推導出表達式類型 2int i = 4; 3decltype(i) a;//首先推導變量i的類型為int,然後通過返回結果聲明變量a,a的類型為int
- 在C++中,我們有時候會遇上一些匿名類型,如:
-
1struct2{ 3int d; 4double b; 5}anon_s;
而借助decltype,我們可以重新使用這個匿名的結構體:
-
1decltype(anon_s) as;//定義了一個上面匿名的結構體
- decltype推導四規則:
- 如果e是一個沒有帶括號的標記符表達式或者類成員訪問表達式,那麽decltype(e)就是e所命名的實體的類型(註意:如果e是一個被重載的函數,則會導致編譯錯誤)
- 否則,假設e的類型是T,如果e是一個將亡值,那麽decltype(e)為T&&
- 否則,假設e的類型為T,如果e是一個左值,那麽decltype(e)為T&
- 否則,假設e的類型為T,則decltype(e)為T
- 舉例說明:
-
1 int i = 4; 2 int arr[5] = {0}; 3 int *ptr = arr; 4 struct s 5 { 6 double d; 7 }s; 8 void Overloaded(int); 9 void Overloaded(char);//函數重載 10 int && RvalRef();
- 註意:字符串字面值常量為左值,而且是const左值,而非字符串字面常量則是右值
decltype關鍵字