返回值 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的型別就...