成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

不知道C++這七大特性,絕對(duì)枉為圈中人

2021-02-16    分類(lèi): 網(wǎng)站建設(shè)

作為一種計(jì)算機(jī)語(yǔ)言,C++經(jīng)歷了許多發(fā)展變化。

當(dāng)然,這些改變并不是一蹴而就的。C++曾經(jīng)缺乏活力與創(chuàng)新,因此很不受歡迎。

但是在C++標(biāo)準(zhǔn)委員會(huì)決定加速發(fā)展這個(gè)語(yǔ)言之后,形勢(shì)發(fā)生了改變。

2011年起,C++一躍成為了具有活力、不斷演進(jìn)、廣受喜愛(ài)的計(jì)算機(jī)語(yǔ)言。

C++蛻變后也并沒(méi)有簡(jiǎn)單多少,仍是最難的編程語(yǔ)言之一。但是,C++確實(shí)比之前更加人性化了。

本文要講的是的C++的一些新特性(以有8年歷史的C++11為例),相信每個(gè)程序員都會(huì)對(duì)這個(gè)話(huà)題感興趣。

注:本文略過(guò)了一些高級(jí)特性。

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)型為

  1. map>>?

沒(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)大。

第七行和第八行中使用了括號(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è)矢量嗎?

以上代碼是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++這七大特性,絕對(duì)枉為圈中人

有時(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é)果就是:

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

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

  1. //?previous?
  2. std::tuple?user?("M","Chy",?25);?
  3. //?deduction?in?action!??
  4. 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++這七大特性,絕對(duì)枉為圈中人
分享URL:http://jinyejixie.com/news24/101274.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)自適應(yīng)網(wǎng)站、軟件開(kāi)發(fā)、網(wǎng)站維護(hù)、網(wǎng)站排名、品牌網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

微信小程序開(kāi)發(fā)
石狮市| 噶尔县| 天等县| 金昌市| 漳浦县| 治县。| 射阳县| 科技| 忻州市| 太保市| 桂平市| 东阿县| 乌拉特后旗| 孝感市| 满洲里市| 婺源县| 芒康县| 萝北县| 乐都县| 太和县| 新丰县| 阿克苏市| 老河口市| 瑞丽市| 保定市| 花垣县| 沾益县| 城固县| 旬阳县| 静宁县| 香河县| 井陉县| 通辽市| 康平县| 宣武区| 印江| 台中县| 兴山县| 抚顺县| 阳高县| 黄陵县|