C 之decltype和auto的用法

2021-07-14 08:07:23 字數 1368 閱讀 6756

返回值 decltype ( 表示式 )

1、當表示式返回右值,則decltype返回該表示式的型別;

2、當表示式返回左值,則decltype返回該表示式的左值引用型別;注:

auto的用法:

1、 自動型別推斷

templatet,class u>

void myfunc(t t,u u)

2、返回值佔位。(函式模板中,與decltype結合表示函式返回的型別。)

```

template auto compose(t1 t1, t2 t2)->decltype(t1 + t2)

```

注:

使用auto時,當傳遞的是const變數的時候,必須手動加上const,因為auto不會自動推倒成const,除非和引用連用。

const

int a = 1;

const

auto b = a;//b的型別為const int

auto c = a;//c的型別為int

auto& d = a;//d的型別為const int &

auto宣告的變數必須初始化(堆上的變數也必須提供初始值)。

auto b = new

auto();//錯誤

int *p = new

auto();//錯誤

auto c = new

auto(9);//c的型別為int *

可用*,&,&&修飾auto。

auto * p = auto(3);//auto:int
避免使用舊式auto用法:

auto int a = 6;//錯誤

auto不能用作函式引數和模板引數

int func1(auto a){}//錯誤

template

//錯誤

func2(t a){}

由於auto只是乙個佔位符,所以不能用於型別轉換、sizeof()等操作。

同乙個auto只能推導出同一種型別。

auto a = 8, b = 『y』;//錯誤,因為b和a不能推導成乙個型別

auto 會退化成指向陣列的指標,除非加上引用。

int a[3];

auto b = a;//b的型別為int *

auto& c = a;//c的型別為 int [3]

auto 和 decltype的區別

auto和decltype都是型別推斷的兩種方式,但之間又有區別。主要有這幾個方面的區別 1.auto是通過編譯器計算變數的初始值來推斷型別的,decltype同樣也是通過編譯器來分析表示式進而得到它的型別,但是它不用將表示式的值計算出來。2.編譯器推斷出來的auto型別有可能和初始值型別不同,比如...

auto 和 decltype 的區別

auto 和 decltype 都是型別推斷的方式 區別如下 1 auto 是通過編譯器計算變數的初始值來推斷型別,decltype同樣也是通過編譯器來分析表示式進而得到它的型別,但是它不用將表示式的值計算出來 2 編譯器推斷出來的auto型別可能與初始值型別不同,眾多周知,使用引用實際是使用引用的...

c 中auto和decltype的區別

c 11中引入了auto型別說明符,用它就能讓編譯器替我們去分析表示式所屬的型別,auto讓編譯器通過初始化值來推算變數的型別。如 auto item vall val2 此處編譯器將根據vall和val2相加的結果來推斷item的型別,假如vall和val2的型別是double,則item的型別就...