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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++ decltype

發布時間:2025/4/5 c/c++ 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++ decltype 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
decltype 是 C++11 新增的一個關鍵字,它和 auto 的功能一樣,都用來在編譯時期進行自動類型推導。不了解 auto 用法的讀者請轉到《C++ auto》。

decltype 是“declare type”的縮寫,譯為“聲明類型”。

既然已經有了 auto 關鍵字,為什么還需要 decltype 關鍵字呢?因為 auto 并不適用于所有的自動類型推導場景,在某些特殊情況下 auto 用起來非常不方便,甚至壓根無法使用,所以 decltype 關鍵字也被引入到 C++11 中。

auto 和 decltype 關鍵字都可以自動推導出變量的類型,但它們的用法是有區別的:

auto varname = value;
decltype(exp) varname = value;

其中,varname 表示變量名,value 表示賦給變量的值,exp 表示一個表達式。

auto 根據=右邊的初始值 value 推導出變量的類型,而 decltype 根據 exp 表達式推導出變量的類型,跟=右邊的 value 沒有關系。

另外,auto 要求變量必須初始化,而 decltype 不要求。這很容易理解,auto 是根據變量的初始值來推導出變量類型的,如果不初始化,變量的類型也就無法推導了。decltype 可以寫成下面的形式:

decltype(exp) varname;

exp 注意事項

原則上講,exp 就是一個普通的表達式,它可以是任意復雜的形式,但是我們必須要保證 exp 的結果是有類型的,不能是 void;例如,當 exp 調用一個返回值類型為 void 的函數時,exp 的結果也是 void 類型,此時就會導致編譯錯誤。

C++ decltype 用法舉例: 復制純文本復制
  • int a = 0;
  • decltype(a) b = 1; //b 被推導成了 int
  • decltype(10.8) x = 5.5; //x 被推導成了 double
  • decltype(x + 100) y; //y 被推導成了 double
  • int a = 0; decltype(a) b = 1; //b 被推導成了 int decltype(10.8) x = 5.5; //x 被推導成了 double decltype(x + 100) y; //y 被推導成了 double 可以看到,decltype 能夠根據變量、字面量、帶有運算符的表達式推導出變量的類型。讀者請留意第 4 行,y 沒有被初始化。

    decltype 推導規則

    上面的例子讓我們初步感受了一下 decltype 的用法,但你不要認為 decltype 就這么簡單,它的玩法實際上可以非常復雜。當程序員使用 decltype(exp) 獲取類型時,編譯器將根據以下三條規則得出結果:
    • 如果 exp 是一個不被括號( )包圍的表達式,或者是一個類成員訪問表達式,或者是一個單獨的變量,那么 decltype(exp) 的類型就和 exp 一致,這是最普遍最常見的情況。
    • 如果 exp 是函數調用,那么 decltype(exp) 的類型就和函數返回值的類型一致。
    • 如果 exp 是一個左值,或者被括號( )包圍,那么 decltype(exp) 的類型就是 exp 的引用;假設 exp 的類型為 T,那么 decltype(exp) 的類型就是 T&。

    為了更好地理解 decltype 的推導規則,下面來看幾個實際的例子。

    #include <string> using namespace std; class Student{ public:static int total;string name;int age;float scores; }; int Student::total = 0; int main(){int n = 0;const int &r = n;Student stu;decltype(n) a = n; //n 為 int 類型,a 被推導為 int 類型decltype(r) b = n; //r 為 const int& 類型, b 被推導為 const int& 類型decltype(Student::total) c = 0; //total 為類 Student 的一個 int 類型的成員變量,c 被推導為 int 類型decltype(stu.name) url = "http://c.biancheng.net/cplus/"; //total 為類 Student 的一個 string 類型的成員變量, url 被推導為 string 類型return 0; } using namespace std; class Base{ public:int x; }; int main(){const Base obj;//帶有括號的表達式decltype(obj.x) a = 0; //obj.x 為類的成員訪問表達式,符合推導規則一,a 的類型為 intdecltype((obj.x)) b = a; //obj.x 帶有括號,符合推導規則三,b 的類型為 int&。//加法表達式int n = 0, m = 0;decltype(n + m) c = 0; //n+m 得到一個右值,符合推導規則一,所以推導結果為 intdecltype(n = n + m) d = c; //n=n+m 得到一個左值,符號推導規則三,所以推導結果為 int&return 0; }

    總結

    以上是生活随笔為你收集整理的c++ decltype的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 亚洲二区一区 | 国产无套精品一区二区三区 | 窝窝午夜视频 | 久久久久久久久久久国产精品 | 日本少妇激情 | 亚洲欧美系列 | 成人毛片18女人毛片免费 | 色 综合 欧美 亚洲 国产 | 青青草国产成人99久久 | 亚洲激情一区二区三区 | 日本国产中文字幕 | 一区视频在线免费观看 | 日本偷偷操 | 五月婷婷视频在线 | a网站在线| 成人av免费在线播放 | 性感美女毛片 | www色亚洲 | 超碰中文字幕 | 日日天天干 | 男女啪啪av| 欧美精品乱人伦久久久久久 | www.狠狠操.com| 红桃视频隐藏入口 | 欧洲一区二区三区四区 | 四虎新网站 | 免费av免费看 | 亚洲成人网在线 | 午夜影院免费体验区 | 成人免费网站 | 少妇脚交调教玩男人的视频 | 国产不卡一区二区视频 | 超爽视频 | 99九九久久| 91色伦| 亚洲码视频 | 亚洲福利影视 | 中文视频一区二区 | 亚洲欧美另类在线视频 | 黄色一级视频在线观看 | 精品爆乳一区二区三区无码av | 韩国国产在线 | 男女日批网站 | 欧美视频在线观看视频 | 99免费在线观看 | 精品成人免费视频 | 高清性爱视频 | 私密spa按摩按到高潮 | 一本久道视频一本久道 | 涩涩视频网址 | 96国产精品| 97色在线观看| 久久成人精品视频 | 国产精品九 | 麻豆久久精品 | 久草视频在线看 | 麻豆91在线| 久久久精品国产sm调教 | 91黄漫| 免费91看片 | 麻豆av影视 | 被黑人啪到哭的番号922在线 | 香蕉啪啪网 | 中文在线中文资源 | 粗喘呻吟撞击猛烈疯狂 | 国产精品久久在线观看 | 日韩激情中文字幕 | 69xx视频在线观看 | 国产伦精品一区二区三区高清版禁 | 蜜臀av一区 | 伊人伊网| 在线观看9.1 | 九九在线免费视频 | 久久伊人草 | 91精品国产入口在线 | 大香伊人中文字幕精品 | 国产99免费 | 无套内谢少妇露脸 | 福利综合网 | 欧美自拍偷拍一区二区 | 国产精品高潮呻吟av | 久久国产成人 | 欧美三级午夜理伦三级老人 | 久久免费少妇高潮久久精品99 | 国产视频第一区 | 91麻豆精品国产91久久久久久久久 | 操到喷水 | 男人的天堂久久 | 91视频三区 | 免费 成 人 黄 色 | 激烈的性高湖波多野结衣 | 操批网站 | 欧美人伦| 都市激情校园春色 | 欧美日韩一区二区在线观看 | 免费黄色小说视频 | 夜夜骑天天操 | 91免费版在线| 一区二区三区欧美在线 |