C++20新特性—概述
生活随笔
收集整理的這篇文章主要介紹了
C++20新特性—概述
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
ISO / IEC 14882:2020(即C++20標準)標準草案在2020年9月獲得了全票通過,年底能正式發(fā)布。對C++20,多數(shù)的評論是它具有可與C++11相比較的重大變化。
下圖是Rainer Grimm博文中給出的C++20的主要變化。
其實,一門編程語言的變化大致上是應該分兩個層面,一個是語言層面,即增加了語言新特性;二是庫層面,其實就是各種“語法糖”等,它們是在語言層面的基礎上擴展、實現(xiàn)出來的,使用起來更“接地氣”。
cppreference 網(wǎng)站也給出了C++20的主要變化(https://en.cppreference.com/w/cpp/20),它就分了兩個部分:語言新特性和運行庫新特性,其中運行庫新特性又分為新增庫和新增類/函數(shù),如下圖所示。
從目前的資料來看,C++20的變化(以筆者的判斷,按“改變度”從大到小)主要體現(xiàn)在:
- module:module的引入,幾乎是革命性的,它同時增加了import,export兩個關鍵字,使C++可以擺脫C中“重復定義”,函數(shù)定義需要寫兩遍等歷史包袱,變得“現(xiàn)代”起來。
- concept(包括require):大量模板的使用,真的很有必要對模板參數(shù)的類型做一定的約束,concept就是為此目的,其實,C#早就引入了where,現(xiàn)在C++補上了這一部分,對模板參數(shù)的約束比以前表達得簡潔多了。
--上面可謂是“大”變化。
- Coroutines:“并行”執(zhí)行的一種方法,作為多線程的一種替代,特別適合“慢速”IO和“高速”計算并行的場合。Coroutines的概念也是早就有了,一些語言相繼引入,之前boost庫中實現(xiàn)了Coroutine的方法,C++11中實現(xiàn)了promise,現(xiàn)在C++引入了co_await、co_yeild、co_return這樣的關鍵字,終于在語言層面實現(xiàn)了Coroutine。
- ?Range,span:C++庫中大量的集合操作,如果有表達“范圍“的操作,一般采用 “映射函數(shù)”+新建集合的方法,現(xiàn)在有了range,span,view等概念,并且有一個range adaptor(|),此時表達就簡潔多了。
- ?3-way comparasion:C++定義了一個新的有趣的比較符:<=>,它形似飛船,因而也稱作“spaceship operator”。集合操作中很常用的操作是“比大小”,<=>提供了一種更簡潔的表達方式。
- consteval, constinit:這兩個關鍵字與constexpr有點類似,都是為了提高運行時速度而在編譯時做處理。
--上面可謂是“小”變化。
- Feature testing:定義了幾個新的attributes,如likely, no_unique_address等,以及一些宏,可用于版本、功能的檢測。
- 新的線程支持:增加了jthread線程類和semaphore同步類等新的特性,與jthread相適應,增加線程外通知機制,總體感覺有一定用途,但不一定是必須的或自己也可以實現(xiàn)簡化版。
- source_location:新增加< source_location>,它被劃分為utility,主要為了信息跟蹤(調試),而代替__FILE__,__LINE__等。
- ?text format:新的格式化輸出表達方式,感覺是C#輸出方式的“模擬”。
- 時間庫增強:主要是增加了時區(qū)(time zone)和日歷(calendar)方面的計算、判斷等。
- ?計算(numeric)增強:增加了一些計算類(宏),endian判斷支持以及按bit轉換等功能
- Synchronized output:增加了basic_syncbuf、basic_osyncstream模板類以及特化的類,它們被定義在<syncstream>中,在不同線程中,向它們的輸出不會再相互干擾了。
--上面可謂是增強。
除上述外,還可以列出一些。在筆者看來,C++20確實給語言帶來比較大的變化,特別是Modules的引入,有讓人感嘆C++與C “漸行漸遠”,而與C#,Java逐漸趨同的意味。
后面將分別介紹這些C++20引入的新特性。
?
總結
以上是生活随笔為你收集整理的C++20新特性—概述的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: carsim/trucksim获取轮胎侧
- 下一篇: C++ 条件运算符 (?:)