c 11 型別的轉換的traits

2021-10-05 21:07:46 字數 1489 閱讀 2173

template

struct remove_const;   移除const

template

struct add_const;   新增const

template

struct remove_reference;   移除引用

template

struct add_lvalue_reference;   新增左值引用

template

struct add_rvalue_reference;   新增右值引用

template

struct remove_extent;   移除陣列頂層的維度

template

struct remove_all_extent;   移除陣列所有的維度

template

struct remove_pointer;   移除指標

template

struct add_pointer;   新增指標

template

struct decay;   移除cv(const volatile)或新增指標

template

struct common_type;   獲取公共型別

使用如下:

cout << is_same::type>::value << endl;        //1

cout << is_same::type>::value << endl;        //1

cout << is_same::type>::value << endl;        //1

cout << is_same::type>::value << endl;        //1

cout << is_same::type>::value << endl;        //1

cout << is_same::type>::value << endl;        //1

typedef common_type::type numbertype;

cout << is_same::value << endl;        //1

template

typename remove_cv::type>::type* create()

或template

typename decay::type* create()

int* p = create();   //ok

對於普通型別,decay是移除引用和cv符,除了普通型別,decay還可以用於陣列和函式,具體規則如下:

先移除t型別的引用,得到型別u,u定義為remove_reference::type

如果is_array::value為true,修改型別type為remove_extent::type

否則,如果is_function::value為true,修改型別type為add_pointer::type

否則,修改型別type為remove_cv::type

c 11 常用判斷型別的traits

template struct is void t是否為void型別 template struct is enum t是否為列舉型別 template struct is union t是否為union型別 template struct is class t是否為class struct型別而不...

c 11 型別推斷

當編譯器能夠在乙個變數的宣告時候就推斷出它的型別,那麼你就能夠用auto關鍵字來作為他們的型別 cpp view plain copy auto x 1 編譯器當然知道x是integer型別的。所以你就不用int了。接觸過泛型程式設計或者api程式設計的人大概可以猜出自動型別推斷是做什麼用的了 幫你...

c 11 型別推導

auto與decltype都是在編譯時期進行自動型別的推導 auto name value 1.int x 0 2.auto p1 x p1 為 int auto 推導為 int 3.auto p2 x p2 為 int auto 推導為 int 4.auto r1 x r1 為 int auto ...