C++ auto關鍵字和基於範圍的for循環

1、auto的概念

C++11中,auto不再是一個存儲類型指示符,而是作爲一個新的類型指示符來指示編譯器,auto聲明的變量必須由編譯器在編譯時期推導而得。

2、auto的使用

實列說明:

int main() 
{
	int x = 10;
	auto a = &x;
	auto* b = &x;
	auto& c = x;

	cout << typeid(a).name() << endl;
	cout << typeid(b).name() << endl;
	cout << typeid(c).name() << endl;

	return 0;
}

運行結果:
在這裏插入圖片描述
解析:
在編譯階段編譯器根據初始化表達式來推導auto的實際類型。因此auto並非是一種“類型”的聲明,而是一個類型聲明時的“佔位符”,編譯器在編譯期會將auto替換爲變量實際的類型。

注意:
1、在使用auto時必須對其進行初始化。

2、當在同一行聲明多個變量時,這些變量必須是相同的類型,否則編譯器將會報錯,因爲編譯器實際只對第一個類型進行推導,然後用推導出來的類型定義其他變量。 列如:

void TestAuto() 
{    
	auto c = 3, d = 4.0;  // 該行代碼會編譯失敗,因爲c和d的初始化表達式類型不同
} 

2、auto不能作爲函數的參數。 列如:

void TestAuto(auto a) {}                    //錯誤

3、auto不能直接用來聲明數組。 列如:

 auto b[] = {4,5,6};                         //錯誤

4、 auto不能定義類的非靜態成員變量

5、實例化模板時不能使用auto作爲模板參數

3、基於範圍的for循環

實列說明:

#include<iostream>
using namespace std;

int main()
 {
	
		int array[] = { 1, 2, 3, 4, 5 };

		for (auto& e : array)
			e *= 2;

		for (auto e : array)
			cout << e << " ";

		return 0;

}

運作結果:
在這裏插入圖片描述
解析:
for循環後的括號由冒號“ :”分爲兩部分:第一部分是範圍內用於迭代的變量,這個變量可以隨意設置;第二部分則表示被迭代的範圍,也就是要循環的目標。一般來說,auto通常和這樣的for循環結合起來使用。

4、範圍for的使用條件

1、for循環迭代的範圍必須是確定的 。對於數組而言,就是數組中第一個元素和後一個元素的範圍;對於類而言,應該提供begin和end的方法, begin和end就是for循環迭代的範圍。列如下面的代碼就是錯誤的:

void TestFor(int array[])
 {     
 	for(auto& e : array)         
 	cout<< e <<endl;
 } 

這是因爲數組array作爲函數參數時,會隱式的轉化爲指針。

2、只會執行++==操作,也就是說只有執行遍歷操作時(列如:遍歷整個數組的元素時),纔可使用它。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章