真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C++的七大特性是什么

本篇內(nèi)容介紹了“C++的七大特性是什么”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

目前創(chuàng)新互聯(lián)已為1000多家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間、網(wǎng)站托管維護(hù)、企業(yè)網(wǎng)站設(shè)計(jì)、永修網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

1. 關(guān)鍵字auto

當(dāng)C++11***次引入auto時(shí),程序員們紛紛喜極而泣!

auto的意義是使C++編譯器可以在編譯時(shí)推導(dǎo)數(shù)據(jù)類(lèi)型,這樣就不用每次都要聲明數(shù)據(jù)類(lèi)型了。當(dāng)數(shù)據(jù)類(lèi)型為

map>>

C++的七大特性是什么

沒(méi)有initializer,就無(wú)法聲明數(shù)據(jù)類(lèi)型(見(jiàn)第五行)。這是說(shuō)得通的。第五行指令并沒(méi)有讓編譯器推導(dǎo)數(shù)據(jù)類(lèi)型。

起初,auto的功能比較有限。在之后新版本的C++中,auto的功能越來(lái)越強(qiáng)大。

C++的七大特性是什么

第七行和第八行中使用了括號(hào)初始化 (bracketedinitialization),這也是C++11的新特性之一。

請(qǐng)注意使用auto時(shí),編譯器必須能夠推導(dǎo)數(shù)據(jù)類(lèi)型。

一個(gè)有趣的問(wèn)題是:如果寫(xiě)下autoa = {1, 2, 3}會(huì)發(fā)生什么?這是個(gè)編譯錯(cuò)誤嗎?是一個(gè)矢量嗎?

實(shí)際上,C++11引入了std::initializer_list.如果聲明auto,花括號(hào)初始化列表會(huì)被當(dāng)做輕量級(jí)容器。

最終,正如前文所言,當(dāng)數(shù)據(jù)結(jié)構(gòu)復(fù)雜時(shí),編譯器類(lèi)型推導(dǎo)很有幫助:

C++的七大特性是什么

別忘了檢查第25行!auto [v1,v2] =  itr.second純粹是C++17的新特性。這個(gè)特性叫做結(jié)構(gòu)化綁定。在舊版本C++中,程序員需要單獨(dú)獲取每個(gè)變量。但是結(jié)構(gòu)化綁定給這一過(guò)程帶來(lái)了便利。此外,如果想獲得數(shù)據(jù)使用引用(reference),只需要加上一個(gè)symbol--auto&[v1,v2]  = itr.second.

2. Lambda表達(dá)式

C++11引入了lambda表達(dá)式,這類(lèi)似于JavaScript里的匿名函數(shù)。它們都是函數(shù)對(duì)象,沒(méi)有名字,且基于簡(jiǎn)潔的語(yǔ)法在不同作用域上捕獲變量。它們也可以被分配給變量。

如果需要在代碼中進(jìn)行一些小而快的操作,又不愿意為此單獨(dú)寫(xiě)一個(gè)函數(shù),那么Lambdas很有用。另一種常見(jiàn)用法是將lambdas作為比較函數(shù)。

C++的七大特性是什么

以上例子可以說(shuō)明很多問(wèn)題。

首先,請(qǐng)注意花括號(hào)初始化是如何提升權(quán)重的。然后是通用的begin(),end()  (這也是C++11的新增部分)。接著是作為數(shù)據(jù)比較器的lambda函數(shù)。lambda函數(shù)的參數(shù)被聲明為auto(這是C++14的新增部分)。在C++14之前是不能對(duì)于函數(shù)參數(shù)使用auto  的。

正如現(xiàn)代C++的awesome庫(kù)中定義的那樣:

  • []—不捕獲任何對(duì)象。所以不能在lambda表達(dá)式內(nèi)使用全局作用域的局部變量,只能使用參數(shù)。

  • [=]— 按值捕獲作用域中的局部對(duì)象(局部變量,參數(shù))。只可使用不可修改。

  • [&]—按引用捕獲作用域中的局部對(duì)象(局部變量,參數(shù))??梢员恍薷摹@尤缦?。

  • [this]—按值捕獲this 指針。

  • [a, &b]—按值捕獲對(duì)象a ,按引用捕獲對(duì)象b。

所以,如果想在lambda函數(shù)內(nèi)部將數(shù)據(jù)轉(zhuǎn)換為其他格式,可以利用作用域的優(yōu)勢(shì)來(lái)運(yùn)用lambda.比如:

C++的七大特性是什么

在上面這個(gè)例子中,如果在lambda表達(dá)式中按值捕獲([factor])局部變量,則不能改變第五行的factor.原因很簡(jiǎn)單——沒(méi)有權(quán)限。

最終,請(qǐng)注意示例中使用了val 作為引用 (reference). 這確保了lambda函數(shù)內(nèi)部的任何變化都會(huì)改變vector.

學(xué)完現(xiàn)代C++后,她們樂(lè)開(kāi)了花!(攝影:Ian Schneider 圖源:Unsplash)

3. if/switch內(nèi)的初始化語(yǔ)句

C++17的這個(gè)特性十分討喜:

C++的七大特性是什么

很明顯,現(xiàn)在可以同時(shí)在if/switch句塊內(nèi)進(jìn)行變量初始化和條件檢查。這有助于保持代碼簡(jiǎn)潔精煉。通用形式為:

if( init-statement(x);condition(x)) {  // do some stuff here } else {  // else has the scope of x  // do some other stuff }

4. 在編譯時(shí)使用constexpr

constexpr  很棒!假如要評(píng)估一些表達(dá)式,且它的值一旦初始化就不會(huì)改變,那么可以預(yù)運(yùn)算其值并將之作為宏?;蛘呃肅++11提供的constexpr.

程序員傾向于盡量減少程序運(yùn)行時(shí)間。所以,如果能讓編譯器進(jìn)行一些操作并減小程序運(yùn)行的壓力,那么就可以縮短運(yùn)行時(shí)間。

C++的七大特性是什么

以上代碼是constexpr的常見(jiàn)例子之一。既然聲明斐波那契數(shù)列函數(shù)為constexpr, 那么編譯器就可以在編譯時(shí)預(yù)運(yùn)算fib(20).  所以編譯之后,可以用constlong long bigval = 2432902008176640000來(lái)替代const longlong bigval =  fib(20).

請(qǐng)注意,傳遞參數(shù)是一個(gè)const  值。這是被聲明為constexpr的函數(shù)的一個(gè)重點(diǎn)——傳遞參數(shù)應(yīng)該是constexpr或const。否則這里的函數(shù)會(huì)和普通函數(shù)一樣,也就是說(shuō)編譯時(shí)不進(jìn)行預(yù)運(yùn)算。

變量也可以是constexpr. 在這種情況下,這些變量在編譯時(shí)必須可評(píng)估;否則會(huì)出現(xiàn)編譯錯(cuò)誤。

有趣的是,后來(lái)在C++17中引入了constexpr-if 和constexpr-lambda.

5. Tuples元組

與pair非常類(lèi)似, tuple是各種數(shù)據(jù)類(lèi)型的固定大小值的集合。

C++的七大特性是什么

有時(shí),相比于tuple,使用 std::array更方便。array類(lèi)似于帶有C++標(biāo)準(zhǔn)庫(kù)的功能的plain  C陣列。這個(gè)數(shù)據(jù)結(jié)構(gòu)是C++11新增的。

6. 類(lèi)模板參數(shù)推導(dǎo)

這個(gè)特性的名字還挺啰嗦。從C++17開(kāi)始,標(biāo)準(zhǔn)類(lèi)模板也可以進(jìn)行模板參數(shù)推導(dǎo)。之前,模板參數(shù)推導(dǎo)只支持函數(shù)模板。結(jié)果就是:

std::pair user = {"M", 25}; // previous std::pair user = {"M", 25}; // C++17

這種推導(dǎo)是“隱性的”。這對(duì)于tuple來(lái)說(shuō)就更方便了。

// previous std::tuple user ("M","Chy", 25); // deduction in action!  std::tuple user2("M", "Chy", 25);

以上這一特性對(duì)不熟悉C++模板的人來(lái)說(shuō)沒(méi)有太大用處。

7. 智能指針

指針有時(shí)很恐怖。由于C++語(yǔ)言為程序員提供了很大程度的自由,所以有時(shí)很容易搬起石頭砸自己的腳。而且很多情況下,麻煩是由指針造成的。

幸運(yùn)的是,C++11引入了智能指針,智能指針比普通指針便捷得多。它們通過(guò)適時(shí)釋放內(nèi)存來(lái)幫助程序員防止內(nèi)存泄漏。它們還有助于代碼達(dá)到異常安全等級(jí)。

“C++的七大特性是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!


新聞名稱:C++的七大特性是什么
分享路徑:http://weahome.cn/article/psjjii.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部