這篇文章主要講解了“C++11怎么移動構造函數(shù)通常”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C++11怎么移動構造函數(shù)通常”吧!
湄潭網(wǎng)站建設公司創(chuàng)新互聯(lián),湄潭網(wǎng)站設計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為湄潭成百上千提供企業(yè)網(wǎng)站建設服務。企業(yè)網(wǎng)站搭建\外貿網(wǎng)站建設要多少錢,請找那個售后服務好的湄潭做網(wǎng)站的公司定做!
不會拋出異常的移動構造函數(shù)
拷貝構造函數(shù)通常伴隨著內存分配操作,因此很可能會拋出異常;移動構造函數(shù)一般是移動內存的所有權,所以一般不會拋出異常。
C++11中新引入了一個noexcept關鍵字,用來向程序員,編譯器來表明這種情況。
noexcept函數(shù)
對于永遠不會拋出異常的函數(shù),可以聲明為noexcept的。這一方面有助于程序員推斷程序邏輯,另一方面編譯器可以更好地優(yōu)化代碼。
為了說明這個效果我們將Tracer類稍作修改。
分別在拷貝構造函數(shù)和移動構造函數(shù)(noexcept)中實際上拋出異??纯闯绦虻姆磻?/p>
沒有聲明noexcept的情況
首先是沒有聲明為noexcept的拷貝構造函數(shù)。
try處理中調用了拷貝構造函數(shù),輸出結果如下:
異常被正常捕捉。
聲明了noexcept函數(shù)的情況
try處理中調用了聲明為noexcept的移動構造函數(shù),輸出結果如下:
同樣的try/catch構造已經(jīng)不能捕捉移動構造函數(shù)拋出的異常從而導致程序終止。這說明noexcept影響了編譯器生成的代碼。
感謝各位的閱讀,以上就是“C++11怎么移動構造函數(shù)通?!钡膬热萘耍?jīng)過本文的學習后,相信大家對C++11怎么移動構造函數(shù)通常這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關知識點的文章,歡迎關注!