一、auto
關鍵字的前世
從c語言開始,auto
關鍵字就被當作是乙個變數的儲存型別修飾符,表示自動變數(區域性變數)。它不能被單獨使用,否則編譯器會給出警告。
#include int main()
編譯執行結果:
$ gcc main.c
main.c:7:7: warning: type specifier missing, defaults to 'int' [-wimplicit-int]
auto c = 345;
~~~~ ^
1 warning generated.
$ ./a.out
a = 123, b = 234, c = 345
二、auto
關鍵字的今生
在c++ 11標準中,新增了新的型別推導特性,考慮到auto
關鍵字很少使用,就給它重新賦予了功能——申明型別由編譯器推導的變數。在c++ 11中,使用auto
定義的變數不能使用其它型別修飾符修飾,該變數的型別由編譯器根據初始化資料自動確定。auto
型別的變數必須進行初始化。
#include int main()
1 .使用c++ 98標準進行編譯,會出現警告:
$ clang++ main.cpp -std=c++98
main.cpp:6:2: warning: 'auto' type specifier is a c++11 extension
[-wc++11-extensions]
auto b = a;
^1 warning generated.
$ ./a.out
i #輸出結果為整數型別
改用c++ 11進行編譯:
$ clang++ main.cpp -std=c++11
$ ./a.out
i
2 .但是如果還是將auto
作為儲存型別修飾符使用,則在c++ 11標準下會出現警告:
#include int main()
使用c++ 98編譯:
$ clang++ main.cpp -std=c++98
$ ./a.out
i
改用c++ 11編譯,出現警告,不再允許作為儲存型別修飾符使用:
$ clang++ main.cpp -std=c++11
main.cpp:6:2: warning: 'auto' storage class specifier is not permitted in c++11,
and will not be supported in future releases [-wauto-storage-class]
auto int b;
^~~~~
1 warning generated.
3 .必須要對auto
型別的變數進行初始化,c++ 98中不能單獨使用auto
定義變數。
$ clang++ main.cpp -std=c++98
main.cpp:6:2: warning: 'auto' type specifier is a c++11 extension
[-wc++11-extensions]
auto b;
^main.cpp:6:7: error: declaration of variable 'b' with type 'auto' requires an
initializer
auto b;
^1 warning and 1 error generated.
$ clang++ main.cpp
main.cpp:6:2: warning: 'auto' type specifier is a c++11 extension
[-wc++11-extensions]
auto b;
^main.cpp:6:7: error: declaration of variable 'b' with type 'auto' requires an
initializer
auto b;
^1 warning and 1 error generated.
三、擴充套件
在c++中還能使用decltype
來獲取變數或者表示式的型別並用來定義新的變數。
#include int main()
編譯執行結果:
$ clang++ main.cpp -std=c++98
$ ./a.out
i$ clang++ main.cpp -std=c++11
$ ./a.out
i
需要注意的是該標準只是改變了c++中auto的用法,但是並沒有影響auto在c語言中的使用!
C 教程之auto關鍵字的使用
一 auto關鍵字的前世 從c語言開始,auto關鍵字就被當作是乙個變數的儲存型別修飾符,表示自動變數 區域性變數 它不能被單獨使用,否則編譯器會給出警告。include intmain 編譯執行結果 gcc main.c main.c 7 7 warning type specifier miss...
auto關鍵字使用
auto型別變數 根據初始值推斷真實的資料型別。有些時候並不能很確定乙個變數應該具備的資料型別,例如 將乙個複雜表示式的值賦給某個變數,此時並不能很明顯的確定這個值所具備的資料型別。此時auto關鍵字可以派上用場。auto儲存型別說明符宣告了乙個自動變數,auto物件和變數被儲存在棧中,它的生命週期...
C 的auto關鍵字
c中的auto關鍵字沒啥大用,因為它是用於顯式地說明變數是自動儲存型別的,但是auto又只能用於預設就是自動儲存的區域性變數,即函式中定義的變數和函式的引數,所以 emmmm,很尷尬的工作,大家根本不鳥他。比如 intft int x c 看出了auto的尷尬,於是需要有新工作的時候就沒有引入新的關...