跟我學c++中級篇——理解類型推導和C++不同版本的支持

一、類型推導

在前面反復分析過類型推導(包括前面提到的類模板參數推導CTAD),類型推導其實就是滿足C++語言這種強類型語言的要求即編譯期必須確定對象的數據類型。換一句話說,理論上如果編譯器中能夠自動推導所有的相關數據類型,也就是能夠滿足所有的情況,那么,C++編程就不會是現在這么難了。
在現在的C++標準中,包括最新的標準內,所有的類型推導其實都是有著嚴格的限制條件的。所以,這種自動推導就已經無法很簡單的應用。從早期的簡單的推導到中期的SFINAE技術再到最新的概念等控制等,其實都只是在進步,而未達到簡單方便的地步。
類型推導對強類型語言來說是一種非常重要的技術,特別是對于C++這種與反射天然不契合的語言來說,更是重要。如果有一天,C++語言可以輕松的原生支持反射后,這種類型推導,也就變得相對簡單多了。

二、C++11中的類型推導

在C++11標準中,做為第一個變化非常大的標準的演進,最主要的是auto和decltype兩種類型推導的方法。特別是auto,新的程序員可能還沒有什么問題,老的程序員可就要明白它與早期的auto的不同。最重的反而是decltype,這個關鍵字可以用來處理表達式的類型,當然也可以處理基礎的數據類型。
一般來說auto是根據初始化過程中的數據類型來推導相關數據類型而decltype則根據表達式的類型(一定要明白,表達式和數據類型變量的關系)。
同樣,C++11中提供了?std::declval這個模板函數,它提供了一個不需要構造即可獲取對象類型的方法,在某些場景下(如純虛類等)可以與decltype等共同進行更方便的類型推導。

三、C++14和17中的類型推導

C++14做為一個小版本的標準演進,進一步增強了auto的應用,特別是表達式也可以使用auto,比如Lambada表達也可以使用auto。同時,解決了前面提到過的拖尾類型,即decltype(auto)的使用。
在C++17中,引入了類模板參數的自動推導,也就是說,不必再顯示的指定模板參數,而是可以根據發現的構造函數來進行自動的推導并構造。另外,結構化綁定的引入做為一種新的初始化或者說解構的方式,更好的發展了auto的應用。同樣也進一步提高了Lambada表達式中對auto變量的捕獲能力。或者,往回看就會發現,auto的應用在不斷的提升,應用的場景也在不斷的普及,這才是標準發展的方向。

四、C++20中的類型推導

在C++20中,最讓人矚目的就是概念(Concepts)以及約束(Requires),而這兩種控制手段則極大的增強了對數據類型推導的控制。另外,做為C++標準演進過程最重要的一部分coroutines(協程),也極大的支持了對數據類型推導情況。不過,這種推導是內部實現控制的,而且協程的應用一直沒有被普及,所以目前大家暫時還可以不用給自己太多壓力。
最后,在C++20前模板的推導可能需要自定義推導規則,但在此之后,這種情況會越來越少,大多數編譯器可自動推導出來。

本文中提到的各自推導技術和方法(包括CTAD),都在前面有過具體的分析說明和舉例,此處只是為了整體貫連起來,就不再反復舉例了。當然,在C++標準文檔中對CTAD也有更詳細的說明,如果有興趣可以去查看。

五、總結

在前面反復分析過相關的類型推導技術,大家應該對其的復雜和難度有了一定的了解。不過,這種數據類型推導,對大多數的開發者來說并沒有什么感覺。因為普通的推導一般都是編譯器自行完成的,只有到模板和元編程技術中,才會主動的進行類型推導的控制或者說出現了自動推導的錯誤,這其實才是類型推導的真正的復雜之處。
大家可根據自己所處的實際情況,有針對性的進行數據類型推導的學習和實踐,而不需要一定掌握到某種深度的程度。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/908406.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/908406.shtml
英文地址,請注明出處:http://en.pswp.cn/news/908406.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vue3+TS+eslint9配置

記錄eslint升級到9.x的版本之后遇到的坑 在 ESLint 9 中,配置方式發生了變化。Flat Config 格式(eslint.config.js 或 .ts)不再支持 extensions 選項。所以vscode編輯器中的 extensions 需要注釋掉,要不然保存的時候不會格式化。…

書籍推薦 --- 《篳路維艱:中國經濟社會主義路徑的五次選擇》

蕭冬連.篳路維艱:中國社會主義路徑的五次選擇[M]. 前不久看完的這本書,還是蠻受震撼的。 這本書比較細致地(引用了很多的史料)、從中央高層的視角講解了從新中國成立一直到改革開放初期這30多年里(1949---1980年代)發生在我國的幾次重大事件(三大改造、第一個五年計…

C++課設:簡易日歷程序(支持傳統節假日 + 二十四節氣 + 個人紀念日管理)

名人說:路漫漫其修遠兮,吾將上下而求索。—— 屈原《離騷》 創作者:Code_流蘇(CSDN)(一個喜歡古詩詞和編程的Coder😊) 專欄介紹:《編程項目實戰》 目錄 一、為什么要開發一個日歷程序&#xff…

(三)動手學線性神經網絡:從數學原理到代碼實現

1 線性回歸 線性回歸是一種基本的預測模型,用于根據輸入特征預測連續的輸出值。它是機器學習和深度學習中最簡單的模型之一,但卻是理解更復雜模型的基礎。 1.1 線性回歸的基本元素 概念理解: 線性回歸假設輸入特征和輸出之間存在線性關系。…

二十五、面向對象底層邏輯-SpringMVC九大組件之HandlerMapping接口設計

一、引言:MVC架構的交通樞紐 在Spring MVC框架中,HandlerMapping接口扮演著"請求導航儀"的關鍵角色,它決定了HTTP請求如何被路由到對應的Controller處理器。作為MVC模式的核心組件之一,HandlerMapping在請求處理的生命…

凌晨四點的星光

凌晨四點的城市像臺停止運轉的老舊機器,陳明裹緊外套踩著路燈的殘影往家走。鍵盤敲擊聲仿佛還在耳邊回響,他揉了揉酸澀的眼睛,手機屏幕突然亮起,是妻子發來的消息:“孩子又發燒了,我帶他去醫院。” 這是他…

Kyosan K5BMC ELECTRONIC INTERLOCKING MANUAL 電子聯鎖

Kyosan K5BMC ELECTRONIC INTERLOCKING MANUAL 電子聯鎖

LeetCode 熱題 100 74. 搜索二維矩陣

LeetCode 熱題 100 | 74. 搜索二維矩陣 大家好,今天我們來解決一道經典的算法題——搜索二維矩陣。這道題在 LeetCode 上被標記為中等難度,要求我們在一個滿足特定條件的二維矩陣中查找一個目標值。如果目標值在矩陣中,返回 true&#xff1b…

如何在 HTML 中添加按鈕

原文:如何在 HTML 中添加按鈕 | w3cschool筆記 (請勿將文章標記為付費!!!!) 在網頁開發中,按鈕是用戶界面中不可或缺的元素之一。無論是用于提交表單、觸發動作還是導航&#xff0…

一篇文章實現Android圖片拼接并保存至相冊

系列文章目錄 一篇文章實現Android圖片拼接并保存至相冊 文章目錄 系列文章目錄前言實現功能類定義和成員變量onCreate方法權限檢查和圖片選擇處理選擇的圖片圖片拼接功能圖片保存功能 使用ImageStitcher類拼接圖片代碼解釋:ImageStitcher.java類定義和方法計算拼接…

2025.06.06【Ribo-seq】|riboWaltz:P-site定位與三堿基周期性分析流程

文章目錄 一、前言二、riboWaltz簡介三、安裝與依賴四、分析流程總覽1. 數據準備2. 典型分析流程2.1 讀取注釋和BAM2.2 P-site定位2.3 三堿基周期性與元分析2.4 密碼子使用偏好分析 五、可視化與結果解讀六、常見問題與注意事項七、實戰經驗與建議八、參考資料九、結語 一、前言…

思維鏈的 內部機制和簡單理解

思維鏈的 內部機制和簡單理解 思維鏈是對解決問題的步驟進行規劃,規劃后將作為上下文 在LLM中繼續輸出。因為Transform都是一個一個單詞生成,沒新生成一個單詞都會將新生的作為上下文。 可以這么理解,但更準確的簡化描述是: 思維鏈是讓模型在回答問題時,先“內部生成”或…

Charles 全流程指南:安裝、設置、抓包與注意事項

Charles 是一款功能強大的網絡抓包工具,支持 HTTP/HTTPS 流量監控、請求/響應分析、斷點調試等功能。本文將從安裝到實戰抓包,提供完整流程及關鍵注意事項。 一、安裝 Charles 官網下載:訪問 Charles 官網,選擇對應系統版本&…

全球長序列高分辨率光合有效輻射(PAR)(1984-2018)

時間分辨率:時空間分辨率:1km - 10km共享方式:開放獲取數據大小:188.92 GB數據時間范圍:1984-01-01 — 2018-12-31元數據更新時間:2022-04-29 數據集摘要 本數據集是一個包含接近35年(1984-201…

【Zephyr 系列 11】使用 NVS 實現 BLE 參數持久化:掉電不丟配置,開機自動加載

??關鍵詞:Zephyr、NVS、非易失存儲、掉電保持、Flash、AT命令保存、配置管理 ??目標讀者:希望在 BLE 模塊中實現掉電不丟配置、支持產測參數注入與自動加載功能的開發者 ??文章長度:約 5200 字 ?? 為什么要使用 NVS? 在實際產品中,我們經常面臨以下場景: 用戶或…

解鎖Java線程池:性能優化的關鍵

一、引言 在 Java 并發編程的世界里,線程池是一個至關重要的概念。簡單來說,線程池就是一個可以復用線程的 “池子”,它維護著一組線程,這些線程可以被重復使用來執行多個任務,而不是為每個任務都創建一個新的線程。?…

一站式直播工具:助力內容創作者高效開啟直播新時代

近年來,隨著互聯網技術的不斷進步和短視頻、直播行業的爆發式增長,越來越多的企業和個人投入到直播電商、互動娛樂、在線教育等場景。直播運營過程中,涉及到數據統計、彈幕互動、流程自動化、內容同步等諸多環節。如何提升運營效率、減少人工…

數論——同余問題全家桶3 __int128和同余方程組

數論——同余問題全家桶3 __int128和同余方程組 快速讀寫和__int128快速讀寫__int128 中國剩余定理和線性同余方程組中國剩余定理(CRT)中國剩余定理OJ示例模板題曹沖養豬 - 洛谷模板題猜數字 - 洛谷 擴展中國剩余定理擴展中國剩余定理OJ示例模板題擴展中國剩余定理(…

Python爬蟲實戰:研究MechanicalSoup庫相關技術

一、MechanicalSoup 庫概述 1.1 庫簡介 MechanicalSoup 是一個 Python 庫,專為自動化交互網站而設計。它結合了 requests 的 HTTP 請求能力和 BeautifulSoup 的 HTML 解析能力,提供了直觀的 API,讓我們可以像人類用戶一樣瀏覽網頁、填寫表單和提交請求。 1.2 主要功能特點…

祝?高考加油

以下是極為詳細的高考注意事項清單,涵蓋考前、考中、考后全流程,建議逐條核對: 一、考前準備 1. 證件與物品 必帶清單: 準考證:打印2份(1份備用),塑封或夾在透明文件袋中防皺濕。身…