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

2021-09-29 17:42:35 字數 2336 閱讀 8019

關於auto關鍵字的簡介

在早期的c / c++中的auto含義是使用auto修飾的變數,是具有自動儲存器的區域性變數。

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

來看一段**

接下來我們再修改一下,再加入一行變數宣告:

auto e;
這樣是無法通過編譯的,因此使用auto定義變數時必須對其進行初始化,在編譯階段編譯器需要根據初始化表示式來推導auto的實際型別。也就是說auto並不是一種型別宣告,而是乙個型別宣告時的「佔位符」,編譯器在編譯的時候會將auto替換為變數的實際型別。

關於auto的一些使用

auto 與 指標和引用結合起來使用

先看例子

使用auto宣告指標型別時,用auto和auto*沒有任何區別,但是使用auto宣告引用型別時則必須加&

在同一行定義多個變數 比如

auto a = 1, b = 2;
要注意下面這樣是不可以的

auto c = 3, d = 4.0;
因為c和d的初始化表達型別不同

下面列舉一些不可以使用auto的情況:

auto不可以作為函式的引數

例如:

void testauto(auto a)

這樣寫的話**編譯就會報錯,因為auto不可以作為形參型別,編譯器無法對a的實際型別進行推導

不可以用auto直接宣告陣列

例如:

void testauto(auto a)

; auto b = ;

}

對auto的總結:

auto是乙個型別修飾符,他會根據你給變數初始化的值的型別來決定自己是什麼型別

auto定義的變數必須初始化,否則不知道auto是什麼型別

auto可以連續定義變數,型別由第乙個定義的變數決定,後續不能違背這個型別,但是可以定義對應型別的指標和引用

auto不能做函式的引數型別

auto不能參與陣列的型別

c++11後,auto會失去原本的含義

基於範圍的for迴圈(c++11)

首先是範圍for的語法

之前我們想要遍歷乙個陣列,可以按照下面的方式

#include using namespace std;

int main()

; int n = sizeof(array) / sizeof(array[0]);

for (int i = 0; i < n; ++i)

cout << endl;

system("pause");

return 0;

}

或者

for (int * p = array; p < array + n; ++p)

cout << endl;

對於乙個有範圍的集合而言,說明迴圈的範圍很多時候顯得有些多餘,並且還有可能出現錯誤,所以在c++11中引入了基於範圍的for迴圈

範圍for的語法:

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

也就是說,在我們引入了範圍for之後,可以寫為下面這樣

for (auto & i : array)

cout << endl;

當然也可以改變陣列中的值

for (auto & i : array)

這都是可以的。

for迴圈的迭代範圍必須是確定的:

例如下面這樣的使用方法,for迴圈的範圍就不確定。

void testauto(int array)

}

C 中,auto 關鍵字

在函式返回值 range for 等情況中 1 auto使用有5種用法 auto 拷貝 auto 左值引用,只能接左值 和常量右值 auto 萬能引用,能接左值和右值 const auto const 萬能引用,能接左值和右值 const auto 常量右值引用,只能接右值 很多人直接就寫成 aut...

c 中的auto關鍵字

auto等同於c 的var。從其初始表示式推斷宣告的變數的型別。用於編譯器已宣告變數的初始化表示式,或使用lambda表示式引數來推導。除非確實需要使用轉換,否則都需要用auto。它擁有可靠性 效能 不進行任何轉換 可用性 拼寫錯誤 效率 量 需要注意的是auto只代表型別或類,無法代表指標 引用等...

C 的auto關鍵字

c中的auto關鍵字沒啥大用,因為它是用於顯式地說明變數是自動儲存型別的,但是auto又只能用於預設就是自動儲存的區域性變數,即函式中定義的變數和函式的引數,所以 emmmm,很尷尬的工作,大家根本不鳥他。比如 intft int x c 看出了auto的尷尬,於是需要有新工作的時候就沒有引入新的關...