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

C++之auto與decltype

編輯:C++入門知識

C++之auto與decltype


C++11中新增了兩種推倒型別的方法,auto和decltype,從而我們的變量定義就方便了很多。

一、auto關鍵詞是根據其初始化物的類型來推導的。

(1)推倒時忽略初始化物本身的const屬性。如:

 int x=0;
 auto a=x,b=0;
 cout<

輸出:

i i(i代表int類型)
(2)若為指針或引用,保留其應指涉物的const屬性。如:

 const int *p=0;
 int *q = 0;
 auto px = p;
 auto qx = q;
 cout<
const int &rx = x;
auto &mr = rx;   ///mr為引涉到const int類型的引用
++mr; ///錯誤

輸出:

PKi(指向const int類型的指針)Pi(指向int類型的指針)
(3) 和一般定義語句一樣,一個定義語句中可以定義多個變量,類型也可以不同,但必須具備相同的基本類型。如:

int x=0;
auto ax=x,*xp=&ax,**xxp=&xp;
cout<輸出:

i Pi PPi(指向int指針的指針),三者的基本類型都為int

const int ci=x;
auto *px=&x,*pci = &ci; 
 ///錯誤,有&x推倒得到基本類型為int,而由&ci推倒得到基本類型為const int
(4)數組類型被推到為指針類型,函數類型被推倒為指向函數的指針類型。如:

int f(int i)
{

}

int iar[100];
auto aiar = iar;
auto af = f;

cout<

輸出:

A100_i Pi (指向長度為100的int數組 指向int類型的指針)

FiiE PFiiE (參數為int,返回值為int的函數 指向參數為int,返回值為int的函數的指針

(5)引用類型推倒得的是其所綁定類型的對象。如:

int x=0;
int &m = x;
auto am = m;
 ++m;
 cout<

輸出:

1 10

1 11

(6)使用auto定義時,可以像普通定義一樣,為其加上const修飾符

int x=0;
const int &m = x,*px = &x;  ///m和px為指涉向const int的引用和指針
cout<

二、decltype根據所提供的對象進行推倒,但並不使用其作為初始化物。

(1)推倒時初始化物本身的const屬性被保留,字面值推倒為變量。如:

 int x=0;
 const int z=0;
 decltype(x) dx=100;
 decltype(0) dy = 200;
 decltype(z) dz = 300;
 ++dx;
 ++dy;
 cout<
(2)指針或引用的引涉類型const屬性被保留。如:

  int x;
  const int *p = &x;
  decltype(p) dp = &x;  ///推倒得到指向const int類型的指針
  const int &rx = x;
  decltype(rx) drx = x; ///推倒得到綁定到const int類型的引用
  ///++(*p);
  ///++rx;

(3) 和一般定義語句一樣,一個定義語句中可以定義多個變量,類型也可以不同,但必須具備相同的基本類型。

如:

int x;
decltype(x) *px=&x,&rx=x,m=x;

(4)數組和函數類型保持原有類型,不做指針轉化。如:

int f(int i)
{

}
decltype(f) df;
int arr[100];
decltype(arr) dar;
cout<(6)當為decltype提供的用來推倒類型的表達式為左值時,推倒得到表達式的引用類型,為右值時得到表達式的類型。如:

  int x=0;
  int *p = &x;
  ///得到int 引用類型
  ///decltype(*p) pt; 錯誤,引用類型必須初始化
  decltype(*p) pr = x;
  ++pr;
  cout<

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