關於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的尷尬,於是需要有新工作的時候就沒有引入新的關...