一、用途
auto是c++程式語言的關鍵字。用於兩種情況
(1)宣告變數時根據初始化表示式自動推斷該變數的型別
(2)宣告函式時函式返回值的佔位符
二、簡要理解
auto可以在宣告變數時根據變數初始值的型別自動為此變數選擇匹配的型別。
舉例:對於值x=1;既可以宣告: int x=1 或 long x=1,也可以直接宣告 auto x=1
三、用法
根據初始化表示式自動推斷被宣告的變數的型別,如:
auto f = 3.14; //double
auto s("hello"); //const char*
auto z = new auto(9); //int *
auto x1 = 5, x2 = 5.0, x3 = 'r'; //錯誤,必須是初始化為同一型別
但是,這麼簡單的變數宣告型別,不建議用auto關鍵字,而是應更清晰地直接寫出其型別。
auto關鍵字更適用於型別冗長複雜、變數使用範圍專一時,使程式更清晰易讀。如:
std::vectorvect;
for(auto it = vect.begin(); it != vect.end(); ++it)
或者儲存lambda表示式型別的變數宣告:
auto ptr = (double x);//型別為std::function函式物件
四、優勢(
1)擁有初始化表示式的複雜型別變數宣告時簡化**。
比如:
#include #include void loopover(std::vector&vs)
{ std::vector::iterator i=vs.begin();
for(;i變為:
#include #include void loopover(std::vector&vs)
{ for( auto i=vs.begin();;i使用std::vector::iterator來定義i是c++常用的良好的習慣,但是這樣長的宣告帶來了**可讀性的困難,因此引入auto,使**可讀性增加。並且使用stl將會變得更加容易
(2)可以避免型別宣告時的麻煩而且避免型別宣告時的錯誤。
但是auto不能解決所有的精度問題。比如:
#include using namespace std;
int main()
{ unsigned int a=4294967295;//最大的unsigned int值
unsigned int b=1;
auto c=a+b;
cout<<"a="<
上面**中,程式設計師希望通過宣告變數c為auto就能解決a+b溢位的問題。而實際上由於a+b返回的依然是unsigned int的值,姑且c的型別依然被推導為unsigned int,auto並不能幫上忙。這個跟動態型別語言中資料hi自動進行拓展的特性還是不一樣的。
五、注意的地方
(1)可以用valatile,pointer(*),reference(&),rvalue reference(&&) 來修飾auto
auto k = 5;
auto* pk = new auto(k);
auto** ppk = new auto(&k);
const auto n = 6;
(2)用auto宣告的變數必須初始化
(3)auto不能與其他型別組合連用
(4)函式和模板引數不能被宣告為auto
(5)定義在堆上的變數,使用了auto的表示式必須被初始化
int* p = new auto(0); //fine
int* pp = new auto(); // should be initialized
auto x = new auto(); // hmmm ... no intializer
auto* y = new auto(9); // fine. here y is a int*
auto z = new auto(9); //fine. here z is a int* (it is not just an int)
(6)以為auto是乙個佔位符,並不是乙個他自己的型別,因此不能用於型別轉換或其他一些操作,如sizeof和typeid
(7)定義在乙個auto序列的變數必須始終推導成同一型別
auto x1 = 5, x2 = 5.0, x3='r'; //錯誤,必須是初始化為同一型別
(8)auto不能自動推導成cv-qualifiers (constant & volatile qualifiers)
(9)auto會退化成指向陣列的指標,除非被宣告為引用
C auto關鍵字用法
c 98 auto 早在c 98標準中就存在了auto關鍵字,那時的auto用於宣告變數為自動變數,自動變數意為擁有自動的生命期,這是多餘的,因為就算不使用auto宣告,變數依舊擁有自動的生命期 int a 10 擁有自動生命期 auto int b 20 擁有自動生命期 static int c ...
c auto型別說明符
程式設計是常常需要把表示式的值賦給變數,這就要求子再宣告變數的時候清楚知道表示式的型別,然而要做到這一點並不容易,有時候根本做不到。為了解決問題,c 11標準引入了auto型別說明符,用它就能讓編譯器替我們去分析表示式的型別。與原來那些型別說明符不同,auto讓編譯器通過初始值來推算變數型別。顯然,...
c auto型別說明符
文章 鏈結 程式設計是常常需要把表示式的值賦給變數,這就要求子再宣告變數的時候清楚知道表示式的型別,然而要做到這一點並不容易,有時候根本做不到。為了解決問題,c 11標準引入了auto型別說明符,用它就能讓編譯器替我們去分析表示式的型別。與原來那些型別說明符不同,auto讓編譯器通過初始值來推算變數...