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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C 常用新特性(下)

發(fā)布時間:2023/12/2 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C 常用新特性(下) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

多線程

什么是多線程這里就不過多介紹,新特性關(guān)于多線程最主要的就是std::thread的使用,它的使用也很簡單,看代碼:

這里記住,std::thread在其對象生命周期結(jié)束時必須要調(diào)用join()或者detach(),否則程序會terminate(),這個問題在C 20中的std::jthread得到解決,但是C 20現(xiàn)在多數(shù)編譯器還沒有完全支持所有特性,先暫時了解下即可,項目中沒必要著急使用。

左值右值移動語義相關(guān)

大家可能都聽說過左值右值,但可能會有部分讀者還沒有搞清楚這些概念。這里解惑下:

關(guān)于左值和右值,有兩種方式理解:

概念1:

左值:可以放到等號左邊的東西叫左值。

右值:不可以放到等號左邊的東西就叫右值。

概念2:

左值:可以取地址并且有名字的東西就是左值。

右值:不能取地址的沒有名字的東西就是右值。

舉例來說:

a是左值,有變量名,可以取地址,也可以放到等號左邊, 表達式b c的返回值是右值,沒有名字且不能取地址,&(b c)不能通過編譯,而且也不能放到等號左邊。

左值一般有:

  • 函數(shù)名和變量名

  • 返回左值引用的函數(shù)調(diào)用

  • 前置自增自減表達式 i、--i

  • 由賦值表達式或賦值運算符連接的表達式(a=b, a = b等)

  • 解引用表達式*p

  • 字符串字面值"abcd"

介紹右值前需要先介紹兩個概念:純右值和將亡值。

運算表達式產(chǎn)生的臨時變量、不和對象關(guān)聯(lián)的原始字面量、非引用返回的臨時變量、lambda表達式等都是純右值。例如:

  • 除字符串字面值外的字面值

  • 返回非引用類型的函數(shù)調(diào)用

  • 后置自增自減表達式i 、i--

  • 算術(shù)表達式(a b, a*b, a&&b, a==b等)

  • 取地址表達式等(&a)

而將亡值是指C 11新增的和右值引用相關(guān)的表達式,通常指將要被移動的對象、T&&函數(shù)的返回值、std::move函數(shù)的返回值、轉(zhuǎn)換為T&&類型轉(zhuǎn)換函數(shù)的返回值,將亡值可以理解為即將要銷毀的值,通過“盜取”其它變量內(nèi)存空間方式獲取的值,在確保其它變量不再被使用或者即將被銷毀時,可以避免內(nèi)存空間的釋放和分配,延長變量值的生命周期,常用來完成移動構(gòu)造或者移動賦值的特殊任務(wù)。例如:

std::file_system

C 17正式將file_system納入標(biāo)準(zhǔn)中,提供了關(guān)于文件的大多數(shù)功能,基本上應(yīng)有盡有,這里簡單舉幾個例子:

file_system之前,想拷貝個文件、獲取文件信息等都需要使用好多C語言API搭配使用才能完成需求,而有了file_system,一切都變得相當(dāng)簡單。file_system是C 17才引入的新功能,但其實在C 14中就可以使用了,只是file_system在std::experimental空間下。

std::chrono

chrono很強大,也是我常用的功能,平時的打印函數(shù)耗時,休眠某段時間等,我都是使用chrono。

在C 11中引入了duration、time_point和clocks,在C 20中還進一步支持了日期和時區(qū)。這里簡要介紹下C 11中的這幾個新特性。

Rep表示一種數(shù)值類型,用來表示Period的數(shù)量,比如int、float、double,Period是ratio類型,用來表示【用秒表示的時間單位】比如second,常用的duration已經(jīng)定義好了,在std::chrono::duration下:

  • ratio<3600, 1="">:hours

  • ratio<60, 1="">:minutes

  • ratio<1, 1="">:seconds

  • ratio<1, 1000="">:microseconds

  • ratio<1, 1000000="">:microseconds

  • ratio<1, 1000000000="">:nanosecons

ratio的具體模板如下:

clocks

時鐘,chrono里面提供了三種時鐘:

steady_clock

system_clock

high_resolution_clock

steady_clock

穩(wěn)定的時間間隔,表示相對時間,相對于系統(tǒng)開機啟動的時間,無論系統(tǒng)時間如何被更改,后一次調(diào)用now()肯定比前一次調(diào)用now()的數(shù)值大,可用于計時。

system_clock

表示當(dāng)前的系統(tǒng)時鐘,可以用于獲取當(dāng)前時間:

high_resolution_clock

high_resolution_clock表示系統(tǒng)可用的最高精度的時鐘,實際上就是system_clock或者steady_clock其中一種的定義,官方?jīng)]有說明具體是哪個,不同系統(tǒng)可能不一樣,我之前看gcc chrono源碼中high_resolution_clock是steady_clock的typedef。

聲明:

本文于網(wǎng)絡(luò)整理,版權(quán)歸原作者所有,如來源信息有誤或侵犯權(quán)益,請聯(lián)系我們刪除或授權(quán)事宜。

總結(jié)

以上是生活随笔為你收集整理的C 常用新特性(下)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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