日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網營銷解決方案
不想寫表達式的類型?試試auto吧

你以為我說的自動變量類型auto嗎?非也,我們知道C語言中其實也有auto關鍵字,它和早期C++中的auto關鍵字一樣,它修飾局部變量,表示自動存儲期,不過由于默認就是這種,因此我們其實常常見不到這樣的寫法:

成都創(chuàng)新互聯(lián)公司憑借在網站建設、網站推廣領域領先的技術能力和多年的行業(yè)經驗,為客戶提供超值的營銷型網站建設服務,我們始終認為:好的營銷型網站就是好的業(yè)務員。我們已成功為企業(yè)單位、個人等客戶提供了成都做網站、網站建設服務,以良好的商業(yè)信譽,完善的服務及深厚的技術力量處于同行領先地位。

 
 
 
  1. auto int a =10;

本文要介紹的并不是上面的auto,而是C++11中引入的auto關鍵字。

效果

看看下面的代碼:

 
 
 
  1. #include
  2. #include
  3. int main()
  4. {
  5.     std::vector vec{1,2,3,4,5};
  6.     for(std::vector::const_iterator it = vec.begin();it != vec.end();++it)
  7.     {
  8.         std::cout<<*it<
  9.     }
  10.     return 0;
  11. }

對于it的類型,你自己能快速寫出來嗎?我反正是寫不出來。

再看auto版本:

 
 
 
  1. #include
  2. #include
  3. int main()
  4. {
  5.     std::vector vec{1,2,3,4,5};
  6.     for(auto it = vec.begin();it != vec.end();++it)
  7.     {
  8.         std::cout<<*it<
  9.     }
  10.     return 0;
  11. }

是不是簡潔了許多?

沒錯,今天就是介紹自動類型推導關鍵字auto。

auto的作用

說實在的,程序員有時候就是“懶”,可能連個表達式的類型都不想寫,auto就是這樣一個關鍵字,它讓編譯器替我們去分析表達式的類型。

當然了,分析的前提是auto定義的變量有初值,如果連值都沒有,怎么可能知道它是什么類型?

auto用法

(1) 普通類型推導

例如:

 
 
 
  1. auto i = 10;//i為int類型
  2. auto d = 10.2//d 為double類型
  3. auto f = 10.2f//f為float類型

(2) const關鍵字修飾的類型推導

通常auto會忽略掉頂層const(本身是常量,如int *cosnt p),而會保留底層const(指向的對象是常量,如const int* p)。

舉個例子頂層const的例子:

 
 
 
  1. const int ci = 10;
  2. auto aci = ci;//忽略頂層const,推導ci是int,所以aci類型是int
  3. const auto ca = ci//推導ci是int,但是前面有const,所以ca是const int

再說一個底層const的例子:

 
 
 
  1. const int arr[] = {11};
  2. auto p = arr;//arr 是const int *,這是底層const,推導后,保留底層const,所以p是 const int*

arr數組名被當成指針是,是const int*類型,或者說是int const*,它指向的對象是只讀的,因此是底層const,保留,最終p的類型也是int const *。

當然auto還可以設置引用類型,例如:

 
 
 
  1. const int ci = 10;
  2. auto &cp = ci;//cp是一個整型常量引

如果是字面值,則必須加上const:

 
 
 
  1. const auto &ref = 10;//10是字面值,常量引用才能綁定字面值

想一想

想想下面推導的size類型是什么?

 
 
 
  1. std::vector vec;
  2. auto size = vec.size();

沒錯,它是std::vector::size_type。

要你寫下來你肯定不愿意。

不過下面這樣是沒法推導的奧:

 
 
 
  1. vector aa;
  2.    //vector bb = aa;//無法推導出模板類型

下面這段程序幫你查看真正類型的名稱,僅供參考:

 
 
 
  1. #include 
  2. #include 
  3. #include 
  4. #include 
  5. int main()
  6. {
  7.     int     status;
  8.     char   *realname;
  9.     auto type = 1.1;
  10.     realname = abi::__cxa_demangle(typeid(type).name(), 0, 0, &status);
  11.     std::cout << typeid(type).name() << " => " << realname <
  12.     free(realname);
  13.     return 0;
  14. }

輸出結果:

 
 
 
  1. double

總結

乍一看,好像挺簡單的那么一回事,不過使用auto最好注意類型推導規(guī)則,不是很明確的規(guī)則不建議以代碼可讀性為代價而簡化代碼。

當然了,它也有以下特點:

  • 可能使得代碼可讀性差
  • 某些情況auto得到的類型可能不是你想要的

因此一定要合理使用。


本文題目:不想寫表達式的類型?試試auto吧
地址分享:http://www.5511xx.com/article/cosgoos.html