auto關鍵字與範圍for迴圈語句(C 11)

2021-10-06 13:32:34 字數 2323 閱讀 3361

1.auto關鍵字(自動型別推導)

在c++11中auto有了全新的含義:auto不再是乙個儲存型別指示符,而是作為乙個新的型別指示符來指示編譯器,auto宣告的變數必須由編譯器在編譯時期推導而得

1.舉幾個例子

int

testauto()

intmain()

需要注意的是auto並不能代表乙個實際的型別宣告,只是乙個型別宣告時的「佔位符」。使用auto定義變數必須初始化,以便編譯器推斷出auto的實際型別,並且在編譯時編譯器會將auto替換為變數真正的型別。

auto a;

//此時無法通過編譯,使用auto定義變數時必須對其進行初始化

2.auto與指標,引用結合使用

int

main()

注意:使用auto宣告指標型別時,auto與auto*沒有區別

使用auto宣告引用型別時要加 &

3.auto使用時的一些注意細節

1.使用時必須初始化

auto a =

10;

2.使用時不能與其它型別連用

auto

int a;

//不能這樣用

3.auto不能作為函式和模板引數

void

func

(auto a)

//不能用作函式引數

template

<

auto t>

//不能用作模板引數

void

fun(t t)

4.auto不能直接宣告陣列

void

func()

;auto b=

;}

5.auto不能用於非成員變數

struct foo

;

ps:auto僅能夠用於推導static const的整型或者列舉成員(因為其他靜態成員無法在類或是結構體中就地完成初始化,都需要在類的外部進行初始化)。c++11中支援非靜態成員變數的就地初始化,但卻不支援auto型別的非靜態成員變數初始化。

6.在同一行的宣告多個變數時,這些變數必須是相同型別

void

testauto()

通過上面對auto關鍵字的理解,我們將auto與c++11提供的新式範圍for配合使用

先來看看在c98中如何遍歷乙個陣列

void

func()

;for

(int i =

0; i <

sizeof

(array)

/sizeof

(array[0]

); i++

)array[i]*=

2;for(

int* p = array; p < array +

sizeof

(array)

/sizeof

(array[0]

); p++

)cout <<

*p << endl;

}

在c++新標準中提供的範圍for的語法形式為:

for(declaration : expression)

statement

for迴圈後的括號由冒號「 :」分為兩部分:第一部分是範圍內用於迭代的變數,第二部分則表示被迭代的範圍。

還是上面那個遍歷陣列的例子

void

func()

;for

(auto

& e : array)

e *=2;

for(

auto e : array)

cout << e << endl;

}

這裡通過使用auto關鍵字讓編譯器來決定變數e的型別,這裡e的型別是int.每次迭代,array的下乙個元素被拷貝給e.然後再執行操作。

ps:for迴圈迭代的範圍必須是確定的,對於陣列而言,就是陣列中第乙個元素和最後乙個元素的範圍;對於類而言,應該提供begin和end的方法,begin和end就是for迴圈迭代的範圍

範圍for與普通迴圈差不多,也可使用break,continue語句

關鍵字auto,基於範圍的for迴圈

在早期c c 中auto的含義是 使用auto修飾的變數,是具有自動儲存器的區域性變數 c 11中,標準委員會賦予了auto全新的含義即 auto不再是乙個儲存型別指示符,而是作為乙個新的型別指示符來指示編譯器,auto宣告的變數必須由編譯器在編譯時期推導而得 int testauto intmai...

auto關鍵字 decltype關鍵字

自動型別推斷 1 使用auto關鍵字的變數必須有初始值。在定義的時候進行初始化 2 函式引數和模板引數不能被宣告為auto。3 使用auto關鍵字進行型別推導時,如果初始化表示式是引用型別,編譯器會去除引用,除非顯示宣告 4 使用auto使用auto關鍵字進行型別推導時,編譯器會自動忽略頂層cons...

auto關鍵字使用

auto型別變數 根據初始值推斷真實的資料型別。有些時候並不能很確定乙個變數應該具備的資料型別,例如 將乙個複雜表示式的值賦給某個變數,此時並不能很明顯的確定這個值所具備的資料型別。此時auto關鍵字可以派上用場。auto儲存型別說明符宣告了乙個自動變數,auto物件和變數被儲存在棧中,它的生命週期...