程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> auto和decltype,autodecltype

auto和decltype,autodecltype

編輯:C++入門知識

auto和decltype,autodecltype


  • auto

1.編譯器通過分析表達式的類型來確定變量的類型,所以auto定義的變量必須有初始值。

auto i=10;                      //ok,i為整型

auto j;                        //error,定義時必須初始化。
j=2;    

2.auto可以在一條語句中聲明多個變量,但該語句中所有變量的初始值類型必須有一樣。

auto i=0,*P=&i;             //ok,i是整數,p是整型指針
auto a=2,b=3.14;             //error,a和b類型不一致

3.auto會忽略掉頂層const,同時底層const則會保留下來

const int a=2,&b=a;
auto c=a;            //a是int 型,而不是const int,即忽略了頂層const
auto d=&a;           //d是一個指向const int 的指針,即保留了底層const

如果希望auto類型是一個頂層const ,需要明確指出:

const auto e=a;      //e是const int 類型

4.當使用數組作為auto變量的初始值時,推斷得到的變量類型是指針,而非數組

int a[10]={1,2,3,4,5,6,7,8,9,0}
auto b=a;             //b是int *類型,指向數組的第一個元素

int c[2][3]={1}
auto d=c;           //d是int(*d)[3]類型的數組指針
for(auto e:c)        //e是int*類型,而不是int(*)[3]
for(auto &f:c)       //f是int(&f)[3]
//**************************************************
decltype (a) c;      //c是由10個整型數構成的數組,c[10]

 

  • decltype

decltype和auto功能類型,但略有區別:

1.decltype根據表達式類型確定變量類型,但不要求定義時進行初始化

int a=2;
decltype (a) b;            //b是int類型
b=3;
int &c=a;
decltype (c) d=a;          //d為int &類型,因此定義時必須初始化

2.解引用指針操作將得到引用類型

int a=2,*b=a;
decltype (*b) c=a;               //解引用,c是int &類型,因此必須初始化

3.decltype所用的表達式加()得到的是該類型的引用

int a=2;
decltype ((a)) b=a;     //b是int&類型,而不是int類型,必須初始化
decltype (a) c;             //c是int類型

4.decltype所用變量時數組時,得到的同類型的數組,而不是指針

int a[2]={1,2}
decltype (a) b={3,4}   //int b[2]類型

 5.decltype所用變量是函數時,得到的是函數類型,而不是函數指針

int fun(int a);
decltype(fun) *f();        //函數f返回的是 int(*)(int),即函數指針,而decltype(fun)是int(int)類型

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved