日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

《C++ Primer 第五版》第二章(第5小节)——using和typedef,auto和decltype总结

發(fā)布時間:2023/11/30 c/c++ 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《C++ Primer 第五版》第二章(第5小节)——using和typedef,auto和decltype总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.using和typedef(作用:定義類型別名)

? ? ? ? 1)typedef和using都可以用來定義一個類型別名,二者在類型別名上定義沒有區(qū)別。只是需要注意的是類型和類型別名的順序,使用typedef定義類型別名的結(jié)構(gòu)為 typedef 類型 類型別名;使用using定義類型別名的結(jié)構(gòu)為using 類型別名=類型

? ? ? ? 2)但在定義類型模板的情況下,只能使用using。

? ? ? ? typedef的四大用途和兩大陷阱(參考博客:https://blog.csdn.net/ameyume/article/details/6326278#commentsedit):博主介紹的特別詳細(xì)。

? ? ? ? typedef使用功能強(qiáng)大,主要分為一下四個方面的用途:1)定義一種類型別名,不等同于宏替換,特別是定義復(fù)雜結(jié)構(gòu)類型的時候,如typedef char *Pstring; const Pstring mystring;這里定義的是一個常量指針mystring(由于typedef定義類型別名是一個指向char類型的指針,因此加上const之后只是說指針變成了常量指針),如果采用宏替換的話,得到的結(jié)果就是mystring是一個指向常量的指針。2)typedef可以幫助C中簡化結(jié)構(gòu)體的定義;沒有使用typedef定義的結(jié)構(gòu)體為:struct student_info{ int age; int ID;};struct student_info zhangsan;使用typedef定義的結(jié)構(gòu)體為:typedef struct student_info{ int age; int ID;}Student_info;?Student_info zhangsan;(這里的Student_info就是 struct student_info的別名,在C++結(jié)構(gòu)體定義對象時可以不用使用typedef,因?yàn)镃++定義對象不需要寫struct)3)用typedef可以用來定義與平臺無關(guān)的類型,標(biāo)準(zhǔn)庫中的size_t就是采用這種方法,在做跨平臺代碼移植的時候,typedef的用途更加明顯,只需要修改typedef本身的類型,而不需要修改源碼)4)使用typedef可以簡化復(fù)雜的聲明,簡化的規(guī)則是從外到里,逐層使用typedef替換,最后可以得到原聲明的最簡化版本。

? ? ? ?typedef的兩大陷阱在于:1)typedef是定義一個類型別名,分析代碼的時候需要使用類型別名的含義去分析,而不能做類型替換去分析。2)typedef 就像 auto,extern,mutable,static,和 register 一樣,是一個存儲類關(guān)鍵字,在定義類型別名的時候,不能同時出現(xiàn)兩個存儲類的關(guān)鍵字。

2.auto和decltype(作用:獲取對象或者表達(dá)式的類型)

? ? ? ?為了方便在編程中了解某個對象或者表達(dá)式的類型,C++11提供了auto和decltype來得到表達(dá)式或者對象的類型。在此之前復(fù)習(xí)一下上一節(jié)中所述的頂層const和底層const的概念:1)頂層const:定義的變量本身是一個常量,如常量內(nèi)置類型數(shù)據(jù)和常量指針;2)底層const:指針指向的數(shù)據(jù)或者引用綁定的數(shù)據(jù)是一個常量,如指針常量和常量引用;

? ? ? ?使用auto類型說明符應(yīng)注意以下幾個規(guī)則:1)auto可以在一條語句中聲明多個變量,但是多個變量的類型必須一致;2)使用auto時,編譯器一般會忽略頂層const,保留底層的const,也就是要分析左側(cè)auto的類型,右側(cè)的頂層const屬性去掉。3)在2)的基礎(chǔ)上,如果希望保留右側(cè)對象的頂層const屬性,只需要在auto前面加上const即可;4)當(dāng)使用auto來得到引用類型時,如果右側(cè)是字面值常量時,需要在auto前面加上const,如 3)中介紹。使用auto類型說明符的結(jié)論是采用 1)2)來分析auto的類型,然后再使用句法來分析賦值是否正確。

? ? ? ? 使用decltype類型指示符需要注意一下幾個規(guī)則:1)當(dāng)decltype括號中的是一個變量,則返回的是變量的類型(包含頂層const和引用),可以使用decltype去獲取引用(對象的別名)的類型,這里對于引用來說是個例外;2)當(dāng)decltype括號中的類型是一個表達(dá)式時,則返回的是表達(dá)式結(jié)果的類型。3)如果括號中的是一個解引用或者給變量加多層括號,則返回的是引用類型(引用類型和解引用的結(jié)果或括號中的變量結(jié)果相同),因?yàn)樽兞渴且环N可以作為左值的特殊表達(dá)式(只有括號中是變量才是這種情況,否則多個括號情況就按表達(dá)式來分析)

? ? ? ?auto和decltype的區(qū)別在于:auto是獲取右側(cè)數(shù)據(jù)的類型,并對變量進(jìn)行賦值操作;而decltype只是為了獲取括號中的表達(dá)式的類型,其結(jié)果類型和表達(dá)式的形式有關(guān)。

總結(jié)

以上是生活随笔為你收集整理的《C++ Primer 第五版》第二章(第5小节)——using和typedef,auto和decltype总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。