一、用途
auto是c++程式語言的關鍵字。用於兩種情況
(1)宣告變數時根據初始化表示式自動推斷該變數的型別
(2)宣告函式時函式返回值的佔位符
二、簡要理解
auto可以在宣告變數時根據變數初始值的型別自動為此變數選擇匹配的型別。
舉例:對於值x=1;既可以宣告: int x=1 或 long x=1,也可以直接宣告 auto x=1
三、用法
根據初始化表示式自動推斷被宣告的變數的型別,如:
auto f =
3.14
;//double
autos(
"hello");
//const char*
auto z =
newauto(9
);//int *
auto x1 =
5, x2 =
5.0, x3 =
'r';
//錯誤,必須是初始化為同一型別
但是,這麼簡單的變數宣告型別,不建議用auto關鍵字,而是應更清晰地直接寫出其型別。
auto關鍵字更適用於型別冗長複雜、變數使用範圍專一時,使程式更清晰易讀。如:
std::vector<
int> vect;
for(
auto it = vect.
begin()
; it != vect.
end();
++it)
或者儲存lambda表示式型別的變數宣告:
auto ptr =
(double x)
;//型別為std::function函式物件
四、優勢
(1)擁有初始化表示式的複雜型別變數宣告時簡化**。
比如:
#include
#include
void
loopover
(std::vector
&vs)
}
變為:
#include
#include
void
loopover
(std::vector
&vs)
}
使用std::vectorstd::string::iterator來定義i是c++常用的良好的習慣,但是這樣長的宣告帶來了**可讀性的困難,因此引入auto,使**可讀性增加。並且使用stl將會變得更加容易
(2)可以避免型別宣告時的麻煩而且避免型別宣告時的錯誤。
但是auto不能解決所有的精度問題。比如:
#include
using
namespace std;
intmain()
上面**中,程式設計師希望通過宣告變數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 =
newauto
(k);
auto
** ppk =
newauto
(&k)
;const
auto n =
6;
(2)用auto宣告的變數必須初始化
(3)auto不能與其他型別組合連用
(4)函式和模板引數不能被宣告為auto
(5)定義在堆上的變數,使用了auto的表示式必須被初始化
int
* p =
newauto(0
);//fine
int* pp =
newauto()
;// should be initialized
auto x =
newauto()
;// hmmm ... no intializer
auto
* y =
newauto(9
);// fine. here y is a int*
auto z =
newauto(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會退化成指向陣列的指標,除非被宣告為引用
auto關鍵字使用
auto型別變數 根據初始值推斷真實的資料型別。有些時候並不能很確定乙個變數應該具備的資料型別,例如 將乙個複雜表示式的值賦給某個變數,此時並不能很明顯的確定這個值所具備的資料型別。此時auto關鍵字可以派上用場。auto儲存型別說明符宣告了乙個自動變數,auto物件和變數被儲存在棧中,它的生命週期...
C 中auto的使用
auto是乙個c c 語言儲存型別,僅在語句塊內部使用,初始化可為任何表示式,其特點是當執行流程進入該語句塊的時候初始化可為任何表示式。c語言中提供了儲存說明符auto register extern static說明的四種儲存類別。四種儲存類別說明符有兩種儲存期 自動儲存期和靜態儲存期。其中aut...
auto識別符號的使用
c 98 auto 早在c 98標準中就存在了auto關鍵字,那時的auto用於宣告變數為自動變數,自動變數意為擁有自動的生命期,這是多餘的,因為就算不使用auto宣告,變數依舊擁有自動的生命期 int a 10 擁有自動生命期 auto int b 20 擁有自動生命期 static int c ...