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

[C++] auto類型說明符

編輯:C++入門知識

[C++] auto類型說明符


我們經常會將表達式的值賦給變量,這就要求在變量聲明時清楚地知道表達式的類型。有時候是很復雜的一件事,在C++11中引入了auto類型說明符,用它就能讓編譯器替我們去分析表達式所屬的類型。當然,auto變量必須有初始值,這樣編譯器才能推斷其類型:

 

	double val1 = 1.1, val2 = 2.2;
	auto item = val1 + val2;			// item為double類型

使用auto也能在一條語句中聲明多個變量。因為一條語句只能有一個基本數據類型,因此該語句中所有變量的初始基本類型必須一致:

 

 

	auto i0 = 0, *pI = &i0;				// ok, i0為int類型, p為int指針
	auto sz = 0, pi = 3.14;				// fail, sz和pi類型不一致

 

復合類型、const和auto

 

編譯器推斷出來的auto類型有時候和初始值類型不完全一致,編譯器會適當的改變結果類型使其更符合初始化規則。

引用:使用引用實際上使用的是引用的對象,當引用被用作初始化時,真正參與初始化的其實是引用對象的值。此時,編譯器以引用對象的類型作為auto的類型:

 

	int i = 0, &r = i;
	auto a = r;							// a是一個int,r是i的別名,而i是一個int

auto一般會忽略掉頂層const,而會保留底層const,比如當初始值是一個指向常量的指針時:

 

 

	const int ci = i, &cr = ci;
	auto b = ci;						// b是一個int,ci的頂層const被忽略
	auto c = cr;						// c是一個int,cr的頂層const被忽略
	auto d = &i;						// d是一個int型指針
	auto e = &ci;						// e是一個指向整型常量的指針,對常量對象取地址是一種底層const

若希望推斷出的auto類型是一個頂層const,需要明確支出:

 

 

	const auto f = ci;

還可以將引用類型設置為auto,原來的初始化規則仍然適用,初始值的頂層const屬性會被保留:

 

 

	auto &g = ci;						// g是一個整型常量引用,綁定到ci
	auto &h = 42;						// error, 不能為非常量引用綁定字面值
	const auto &j = 42;					// ok,可以為常量引用綁定字面值

要在一條語句中定義多個變量,符號&和*只從屬於某個聲明符,而非基本數據類型的一部分,因此初始值必須是同一類型:

 

 

	auto k = ci, &l = i;				// k是int, l是int&
	auto &m = ci, *p = &ci;				// m是對整型常量的引用,p是指向整型常量的指針
	auto &n = i, *p2 = &ci;				// error, n是對整型的引用,p2是指向整型常量的指針

一些額外的例子:

 

 

	const int i = 42;
	auto j = i;							// j是int
	const auto &k = i;					// k是int i的常量引用
	auto *p = &i;						// p是指向整型常量i的指針
	const auto j2 = i, &k2 = i;			// j2是整型常量, k2是int i的常量引用


 

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