您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“C語言中auto怎么用”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“C語言中auto怎么用”這篇文章吧。
你以為我說的自動變量類型auto嗎?非也,我們知道C語言中其實也有auto關鍵字,它和早期C++中的auto關鍵字一樣,它修飾局部變量,表示自動存儲期,不過由于默認就是這種,因此我們其實常常見不到這樣的寫法:
auto int a =10;
本文要介紹的并不是上面的auto,而是C++11中引入的auto關鍵字。
效果
看看下面的代碼:
#include<iostream>#include<vector> int main() { std::vector<int> vec{1,2,3,4,5}; for(std::vector<int>::const_iterator it = vec.begin();it != vec.end();++it) { std::cout<<*it<<std::endl; } return 0; }
對于it的類型,你自己能快速寫出來嗎?我反正是寫不出來。
再看auto版本:
#include<iostream> #include<vector> int main() { std::vector<int> vec{1,2,3,4,5}; for(auto it = vec.begin();it != vec.end();++it) { std::cout<<*it<<std::endl; } return 0; }
是不是簡潔了許多?
沒錯,今天就是介紹自動類型推導關鍵字auto。
auto的作用
說實在的,程序員有時候就是“懶”,可能連個表達式的類型都不想寫,auto就是這樣一個關鍵字,它讓編譯器替我們去分析表達式的類型。
當然了,分析的前提是auto定義的變量有初值,如果連值都沒有,怎么可能知道它是什么類型?
auto用法
(1) 普通類型推導
例如:
auto i = 10;//i為int類型 auto d = 10.2//d 為double類型 auto f = 10.2f//f為float類型
(2) const關鍵字修飾的類型推導
通常auto會忽略掉頂層const(本身是常量,如int *cosnt p),而會保留底層const(指向的對象是常量,如const int* p)。
舉個例子頂層const的例子:
const int ci = 10; auto aci = ci;//忽略頂層const,推導ci是int,所以aci類型是int const auto ca = ci//推導ci是int,但是前面有const,所以ca是const int
再說一個底層const的例子:
const int arr[] = {11}; auto p = arr;//arr 是const int *,這是底層const,推導后,保留底層const,所以p是 const int*
arr數組名被當成指針是,是const int*類型,或者說是int const*,它指向的對象是只讀的,因此是底層const,保留,最終p的類型也是int const *。
當然auto還可以設置引用類型,例如:
const int ci = 10; auto &cp = ci;//cp是一個整型常量引
如果是字面值,則必須加上const:
const auto &ref = 10;//10是字面值,常量引用才能綁定字面值
想一想
想想下面推導的size類型是什么?
std::vector<int> vec; auto size = vec.size();
沒錯,它是std::vector::size_type。
要你寫下來你肯定不愿意。
不過下面這樣是沒法推導的奧:
vector<string> aa; //vector<string> bb = aa;//無法推導出模板類型
下面這段程序幫你查看真正類型的名稱,僅供參考:
#include <iostream>#include <vector> #include <cxxabi.h> #include <typeinfo> int main() { int status; char *realname; auto type = 1.1; realname = abi::__cxa_demangle(typeid(type).name(), 0, 0, &status); std::cout << typeid(type).name() << " => " << realname <<std::endl; free(realname); return 0; }
輸出結果:
double
總結
乍一看,好像挺簡單的那么一回事,不過使用auto最好注意類型推導規則,不是很明確的規則不建議以代碼可讀性為代價而簡化代碼。
當然了,它也有以下特點:
可能使得代碼可讀性差
某些情況auto得到的類型可能不是你想要的
因此一定要合理使用。
以上是“C語言中auto怎么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。