




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第一節(jié)主要升級(jí)10、右值與move語(yǔ)義第二節(jié)Lambda函數(shù)對(duì)象第三節(jié)function包裝器C++11標(biāo)準(zhǔn),原名C++0x,是C++的正式標(biāo)準(zhǔn)(ISO/IEC14882:2011),它將取代第二版標(biāo)準(zhǔn)C++98以及C++03(兩者差別極小)。C++11包含了機(jī)能的升級(jí),STL的拓展,并且加入了大部分C++TR1程序庫(kù)(除數(shù)學(xué)上的特殊函數(shù))。C+是自年C++98以來(lái)第一次重大升級(jí)。根據(jù)計(jì)劃,ISO將在年發(fā)布C++的后續(xù)版本。目前,各家編譯器對(duì)標(biāo)準(zhǔn)的各有不同。圖1C第一節(jié)升。這些升級(jí)大致可以分為:運(yùn)行期強(qiáng)化、建構(gòu)其強(qiáng)化、可用性強(qiáng)化,以及其他一些強(qiáng)化。C++新增類型longlong和unsignedlonglong,以支持64位整型;新增char16_t和char32_t,以支持16位和32位的字符表示。另外,例程345678
#include<string>usingnamespaceint{stringnormal_str="Firstline.\nSecondline.\nEndofstringraw_str=R"(Firstline.\nSecondline.\nEndofmessage.\n)";}例程intdoubleintdoubleintintint*p=newclassudC(intclassudC(inta,doubleintdouble}udCudCstructintdouble}udSmyUDs{53.2f};//傳統(tǒng)C⑴auto與例程intplus(inta,intb)( doubleint((temte<typenameTa,typenamevoidsomeFun(Taa,Tb)}345678第18例程第1 第2 temte<typenameTa,typename autosomeFun(Taa,Tbb)-例程第12345第6 第7 89第10第11第12第16第17第18第19第20第21第22第23usingusingnamespace te<typenameautoiterMulti(Ta,Tb)->decltype(*a*decltype(*a**b)tmp=*a+return}intvector<int>cout<<iterMulti(myVec.begin(),(myVec.begin()+1))<<return}typedef torusing temte<typenameusing例程usingnamespaceusingnamespaceintmap<string,int>m{{"a",1},{"b",2},{"c",3}for(autop:cout<<p.first<<":"<<p.second<<}}5678例程structA()=structA()=default;virtual~A()=default;值操作符,要禁用,這兩個(gè)特殊的成員函數(shù)=delete即可。例程usingnamespacestructusingnamespacestructNoCopy&operator=(constNoCopy&)=NoCopy(constNoCopy&)=intNoCopyb(a);}345678例程classM{//C++11classM{//C++11delegatingintx,charM(intv):x(v),y(0),p(newchar[1000]){}//#1M():M(0)cout<<"delegatingctor"<<}⑴unique_ptr是一種定義在<memory>中的智能指針(smartpointer)。它持有對(duì)對(duì)象的獨(dú)有權(quán)即兩個(gè)unique_ptr不能指向一個(gè)對(duì)象,不例程usingnamespaceusingnamespacevoidunique_ptr<int>pA(newcout<<*pA<<//unique_ptr<int>pB=unique_ptr<int>pC=//cout<<*pA<<cout*pCendl;//輸出78第12第16第18intintreturn} 例程2345678
usingnamespacestd;voidTest(){shared_ptr<int>cout<<pA.use_count()<<endl;shared_ptr<int>pB(newint(100));cout<<pB.use_count()<<endl;pOuter=pB;cout<<pB.use_count()<<}intcoutpOuter.use_count()endl;cout<<*pOuter<<endl;//輸出100return}⑶有時(shí)對(duì)象必須法,用來(lái)在不引起計(jì)數(shù)增加的情況下shared_ptr的基礎(chǔ)對(duì)象。通常,當(dāng)您在shared_ptr實(shí)例之間循環(huán)時(shí),就會(huì)出現(xiàn)此情況。行循環(huán)。如果循環(huán)不可避免,甚至由于某種原因而更為可取,請(qǐng)使用weak_ptr為一個(gè)或多個(gè)所有者提供對(duì)其他shared_ptr 。使用weak_ptr,您可以創(chuàng)建連接到現(xiàn)有相關(guān)實(shí)例組的shared_ptr,但僅當(dāng)基礎(chǔ)內(nèi)存資源有效時(shí)才行。weak_ptr本身并參與計(jì)數(shù),因此,它無(wú)法計(jì)數(shù)轉(zhuǎn)到為零。但是,您可以使用weak_ptr來(lái)嘗試獲取shared_ptr的新副本,通過(guò)使用該副本進(jìn)行初始化。如果內(nèi)存已被刪除,則會(huì)bad_weak_ptr異常。如果內(nèi)存仍有效,則新的共享指針會(huì)遞增計(jì)數(shù),并確保只要shared_ptr變量保持在范圍內(nèi),內(nèi)存就有效。#include#include 例程#include#include#include#includeusingnamespaceclass{intwstringexplicitController(inti):Num(i),{wcout<<L"CreatingController"<<Num<<}{wcout<<L"DestroyingController"<<Num<<}//Demonstrateshowtotestwhether//pointed-tomemorystillexistsorvoidCheckStatuses(){{{autop=wcout<<L"Statusof"<<p->Num<<"="<<p->Status<<}catch(bad_weak_ptr{wcout<<L"Nullobject"<<}}5678第40void{void{//Eachcontrollerdependsonallothersnotbeing//Giveeachcontrollerapointertoallthefor(unsignedinti=0;i<v.size();{for_each(v.begin(),v.end(),[v,i](shared_ptr<Controller>{if(p->Num!={wcout<<L"push_backtov["<<i<<"]:"<<p->Num<<}}{wcout<<L"use_count="<<p.use_count()<<}int{return}voidprint()noexcept10、右值與move語(yǔ)#include#include#include#include#includeusingnamespaceint{stringstr= vector<string>cout<<"Aftercopy,stris\""<<str<<cout<<"Aftermove,stris\""<<str<<cout<<"Thecontentsofthevectorare"<<v[0]<<""<<v[1]<<return}第 第行第第第第#includeusing#includeusingnamespacevoidstringSwap(string&a,stringstringtmp=a=b=}int{stringa=stringb=stringSwap(a,cout<<a<<endl<<return345678}class}class {CMyString(constchar*pszSrc={cout<<"CMyString(constchar*pszSrc=NULL)"<<if(pszSrc=={m_pData=new*m_pData=}{m_pData=newstrcpy(m_pData,}}CMyString(constCMyString{cout<<"CMyString(constCMyString&s)"<<m_pData=newstrcpy(m_pData,}CMyString(CMyString{cout<<"CMyString(CMyString&&s)"<<m_pData=s.m_pData=}{cout<<"~CMyString()"<<delete[]move的實(shí)現(xiàn)與右值密切相關(guān),如例程所示第第第第第第行8第38m_pData=m_pData=}CMyString&operator=(constCMyString{cout<<"CMyString&operator=(constCMyString&s)"<<if(this!={delete[]m_pData=newstrcpy(m_pData,}return}CMyString&operator=(CMyString{cout<<"CMyString&operator=(CMyString&&s)"<<if(this!={delete[]m_pData=s.m_pData=}return}char第二節(jié)Lambda義函數(shù)對(duì)象類(class)并構(gòu)造函數(shù)對(duì)象(FunctionObject)。例程16是Lambda的是一個(gè)應(yīng)用示例,注意比對(duì)第26行、第27行,會(huì)發(fā)現(xiàn)createNum和[]{returnrand()%10;}地位相同,其中createNum是函數(shù)指針,指向已定義的createNum()函數(shù),[]{returnrand()10Lambda函數(shù)。如果進(jìn)一步觀察二者的代碼更會(huì)發(fā)例程 usingnamespaceintreturnrand()%}if(N==0||N==1)returnfor(intiLoop=2;iLoop<N;++iLoop)if(N%iLoop==0)returnreturn}temte<typenamegreaterThan(Tx)booloperator()(Tx){returnx>num;Tintvector<int>),generate(myVec.beginmyVec.end(returnrand10;Lambdacopy(myVec.begin(),myVec.end(), tor<int>(cout,""));cout<<intcountA=count_if(myVec.begin(),myVec.end(),[](intx){returnx%2==0;intcountBcount_if(myVec.begin(),myVec.end(),bind2nd(less<int>5));//STLintcountCcount_if(myVec.begin(myVec.endisPrime);=(),return}第4第5 678usingnamespaceusingnamespaceclassintudFun(intX){returnX;intoperator()(){returnrand()%100;intautowhatIsreturnrand100Lambdacout<<typeid(whatIs).name()<<//輸出:classautomyUDc=couttypeid(myUDc).name()endl;//輸出:classcoutsizeof(whatIsendl;coutsizeof(udC)endlcoutudC().operator()endl;coutudC().udFun(10)endlreturn}第第第第第第第行 [Capture_List](Parameter_List)mutablethrow()->r}例程usingnamespaceboolusingnamespaceboolisPrime(intif(N==0||N==1)returnintLastNum=N/for(inti=2;i<LastNum;++i)if(N%i==0)returnreturn}intvector<int>for(inti=0;i<100;intnumEven=0,numOdd=0,numPrime=[&numEven,&numOdd,&numPrime](intnumEven+=(X%2==numOdd+=(X%2==numPrime+=(isPrime(X)==true?1:}coutnumEvennumOddnumPrimereturn}Capture_List可以稱之為捕獲列表,用于捕獲Lambda函數(shù)對(duì)象外的參數(shù)。在例程18中,代碼[&numEven,&numOdd,&numPrime](int形式的用法,如例程所示。usingusingnamespaceintintnumA=100,numB=200,numC=300,numSum=autolambdaAnumA](intx){coutnumA;coutlambdaB(10)endlautolambdaC=[=,&numSum]{numSum=numA+numB+coutnumSumendl;autolambdaD=[=]{cout<<(numA+numB+numC)<<endl;第行 第11autolambdaEautolambdaE=[&]{cout<<(numA++)<<endl;coutnumAendl;//輸出autolambdaF=[&,numSum](intN)mutablenumC+=N;numSum+=numC;cout<<numC<<""<<numSum<<coutnumCnumSum<<endl;//輸出:410return}內(nèi),此時(shí)修改該變量的值,則將改變函數(shù)對(duì)象體外的變量值,如第17-19行所示,代碼[&]{cout<<(numA++)<<endl;}中的&變量有變量以值拷貝的形式傳遞到Lambda函數(shù)對(duì)象內(nèi),如第14行所示。第10行代碼[=,&numSum]{numSum=numA+numB+numC;}表示除碼[&,numSum](intN)則表示除numSum變量外其他都已方式傳遞,而numSum則以只拷貝的形式傳遞。碼[this](intN)中的this傳遞到Lambda內(nèi),因此,可以通過(guò)this->num類的數(shù)據(jù)成員或函數(shù)成員。例程usingnamespaceusingnamespaceclassudC(intN)voidprintVector(constvector<int>[this](intcout<<N+this->num<<}}int345678第17intvector<int>intvector<int>udCreturn}例程#includeusingnamespace#includeusingnamespaceint{intm=[](intreturn[](intM){returncoutmendl;//輸出return}45678第三節(jié)function例程#include#include#include#includeusingnamespaceint{autog=[](intx)->return[=](inty){returnx+y;autoh=[](constfunction<int(int)>&f,intreturnf(z)+cout<<g(7)(8)<<autoa=h(g(7),cout<<a<<345678第12第13return}return}第四節(jié)新增庫(kù)文件12345通常為longlong類型的別名。由于ratio是編譯時(shí)特性,因此其使用顯得不同尋常,對(duì)象的定義與普通對(duì)象不同,且不能使用ratio對(duì)象的方法,通常使用typedef。有關(guān)ratio庫(kù)的應(yīng)用示例如例程23所示,第6行是ratio的定義示例,第9行、第10行分別為分子和分母(注意例程usingnamespaceusingnamespaceint>intmax_tUpNummyRatio::num;//intmax_t是longlong的別名,注意不是intmax_tDownNummyRatio::den;//intmax_t是longlongcout<<myRatio::num<<"/"<<typedefratio<4,6>coutmyND::nummyND::denendl;//輸出:2/3constintmax_tnumU=constintmax_tnumD=typedefratio<numU,numD>typedefratio_add<myRatio,myNumUD>::typecoutResult::numResult::denendl;//輸出345678第19第23typedefratio_less<myRatio,typedefratio_less<myRatio,myNumUD>coutboolalphaboolCheck::valueendl;myRatiomyNumUDcout<<tmp1+tmp2<<intmax_tintmax_ttypedefratio<U,D> cout<<giga::num<<"/"<<giga::den<<return}typedef typedef 0000,1>typedef 0,1>typedefratio<1000000000000000,1>typedefratio<1000000000000,1>typedef ,1>typedef ,1>兆typedefratio<1000,1>千typedefratio<100,1>百typedefratio<10,1>十typedefratio<1,10>typedefratio<1,100>typedefratio<1,1000>typedef >typedef >typedefratio<1,100000000000>typedefratio<1,100000000000000>typedef >typedef 000>typedef time_point類表示時(shí)間中的一個(gè)點(diǎn),為相對(duì)于(epoch)的duration,相當(dāng)于相對(duì)于某個(gè)基點(diǎn)的偏移量,一般采用1970年1月1例程usingnamespacesystem_clock::time_pointtoday1=system_clock::durationdtn1system_clock::time_pointtoday1=system_clock::durationdtn1=for(autoi=0;i ;system_clock::time_pointtoday2=cout<<(today2-today1).count()<<coutstd::chrono::duration_cast<std::chrono::nanoseconds(today2today1).count()coutstd::chrono::duration_cast<std::chrono::microseconds>(today2today1).countcoutstd::chrono::duration_cast<std::chrono::milliseconds>(today2today1).countreturn}第第第第\^$*+??字符范圍。匹配指定范圍內(nèi)的任意字符。例如,“[a-z]”可以匹配“a”到“z\ \<匹配詞(word)的開始(\<)和結(jié)束(\>)。例如正則表達(dá)式\<the\>能夠匹配字符串"forthewise"中的"the",但是不\(式中最多可以保存9個(gè)),它們可以用\1到\9的符號(hào)來(lái)。|將兩個(gè)匹配條件進(jìn)行邏輯“或”(Or)運(yùn)算。例如正則表達(dá)式(him|her)itbelongstohim"和"itbelongstoher",但是不能匹配"itbelongstothem."。注意:這個(gè)元字符不是所有的軟件都支持的。+匹配1或多個(gè)正好在它之前的那個(gè)字符。例如正則表達(dá)式9匹配 ?{i}個(gè)數(shù)字字符的串,例如A123、A348等,但是不匹配A1234。而正則表達(dá)式[0-9]{4,6}4個(gè)、5個(gè)或者6個(gè)數(shù)2345678第第第第第234567例程#include#include#includeusingnamespaceintconstregex//thesourcestd::stringweekend="Saturdayandstd::smatchboolmatch=regex_search(weekend,result,iffor(size_ti=1;i<result.size();cout<<result[i]<<}}return}例程#include#include#includeusingnamespaceint//regularconststd::regex//thesourcestd::stringweekend="SaturdayandSunday,butsomeFridaysconstfor tori(weekend
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度解除影視制作解除擔(dān)保合同
- 二零二五年度個(gè)人債權(quán)轉(zhuǎn)讓及債務(wù)清收?qǐng)?zhí)行合作協(xié)議
- 二零二五年度跨境離婚協(xié)議書電子化執(zhí)行合同
- 二零二五年度子女自愿離婚協(xié)議書范本及離婚后子女監(jiān)護(hù)權(quán)
- 二零二五年度認(rèn)繳制智能硬件股權(quán)轉(zhuǎn)讓合同
- 2025年度林業(yè)碳匯項(xiàng)目承包樹木砍伐協(xié)議
- 二零二五年度酒店客房租賃及旅游套餐協(xié)議
- 二零二五年度智能停車場(chǎng)年產(chǎn)權(quán)車位轉(zhuǎn)讓服務(wù)協(xié)議
- 2025年度車輛抵押貸款欠款和解與債務(wù)重組服務(wù)合同
- 二零二五年度房地產(chǎn)項(xiàng)目房地產(chǎn)投資顧問(wèn)合作協(xié)議
- 第四講 搜索引擎檢索
- 法語(yǔ)的發(fā)音規(guī)則及法語(yǔ)單詞分類記憶
- 水庫(kù)移民安置檔案分類大綱與編號(hào)方案
- 衛(wèi)生和微生物基礎(chǔ)知識(shí)培訓(xùn)-
- 外徑千分尺檢定證書
- ICU輪轉(zhuǎn)護(hù)士培訓(xùn)計(jì)劃和手冊(cè)
- GB/T 9787-1988熱軋等邊角鋼尺寸、外形、重量及允許偏差
- GB/T 17614.1-2015工業(yè)過(guò)程控制系統(tǒng)用變送器第1部分:性能評(píng)定方法
- 財(cái)務(wù)工作督導(dǎo)檢查記錄表
- 輿情大數(shù)據(jù)監(jiān)測(cè)平臺(tái)建設(shè)方案
- CO2驅(qū)油后期氣竄機(jī)理及解決方法解讀課件
評(píng)論
0/150
提交評(píng)論