C_and_CPP 板


LINE

首先第一點 auto只能推導 靜態型別 也就是編譯時期就能確定的型別 所以看到程式中有virtual這個關鍵字 用auto就要小心了 但原po這個例子沒問題 再來回到原PO的問題 Q: 你如何知道你的auto推導出來的是什麼型別? 這邊提供一個檢查技巧/範例 (effective modern c++這本書有) //先創建一個測試用的class TD template<typename T> // declaration only for TD; class TD; // TD == "Type Displayer" //以auto宣告型別並初始化 auto t = "some string"; //使用TD TD<decltype(t)> tType; //這時候你通常會看到類似的編譯錯誤訊息 error: aggregate 'TD<char*> tType' has incomplete type and cannot be defined 那個 'TD<char*> tType'裡面的char*就是你用auto推出來的型別 再看這例子 std::vector<bool> features(const Widget& w); Widget w; … auto highPriority = features(w)[5]; // is w high priority? … processWidget(w, highPriority); // process w in accord // with its priority 你猜highPriority會被推成什麼型別? 理想的bool? 不對 它被推成 std::vector<bool>::reference 這個型別 這關係到std::vector<bool>裡面的實作方式 這時候只能避開auto了 乖乖使用bool 但可以用上面的方式先檢查推導出來的型別 (後面一點的compiler 好像可以正常推導出bool) 補充: 個人最推薦的auto使用情境 template<typename It> // algorithm to dwim ("do what I mean") void dwim(It b, It e) // for all elements in range from { //想自動取得It<T> 裡面的型別T作為初始化宣告 T val = ... } 你有想過我要如何自動得到並初始化 It<T>裡面的型別T嗎? 答案是要用到trait-class (沒用auto的話) template<typename It> // algorithm to dwim ("do what I mean") void dwim(It b, It e) // for all elements in range from { // b to e while (b != e) { typename std::iterator_traits<It>::value_type currValue = *b; … } } 三小? 這麼簡地的事情 也要弄到那麼複雜的trait-class? C++11自從有了auto之後, 這件事情不再痛苦 這件事情不再痛苦 template<typename It> // as before void dwim(It b, It e) { while (b != e) { auto currValue = *b; … } 參考: Effective Modern C++ item5 與 item6 <大推這本書> --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.24.242.118 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1636917646.A.863.html ※ 編輯: dzwei (114.24.242.118 臺灣), 11/15/2021 04:17:50
1F:→ F04E: 可惜作者已經... 11/16 10:37
2F:推 lc85301: 作者怎麼了owo 11/16 11:49
3F:→ F04E: 在2015年宣布退出C++世界... QQ 11/16 11:57
4F:→ WangDaMing: 剛查了~還真退了!本來在等他講c++20 XD 11/16 22:04
5F:→ F04E: 宣布退出的時候本來還說會對已出版的書持續勘誤 11/17 08:17
6F:→ F04E: 但在2018時大師發現自己已經無法對讀者寄來的TR進行確認 11/17 08:20
7F:→ F04E: 所以現在連勘誤都... 11/17 08:21
8F:推 unmolk: 一樓那樣講我還以為QAQ 11/25 12:22
9F:推 CoNsTaR: 一樓笑死 很故意 XDDD 11/26 09:40







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:WOW站內搜尋

TOP