原文:(原創)C++11改進我們的程序之move和完美轉發

本次要講的是右值引用相關的幾個函數:std::move, std::forward和成員的emplace back,通過這些函數我們可以避免不必要的拷貝,提高程序性能。move是將對象的狀態或者所有權從一個對象轉移到另一個對象,只是轉移,沒有內存的搬遷或者內存拷貝。如圖所示是深拷貝和move的區別。 這種移動語義是很有用的,比如我們一個對象中有一些指針資源或者動態數組,在對象的賦值或者拷貝時就不 ...

2013-10-18 16:06 3 8839 推薦指數:

查看詳情

原創C++11改進我們的程序之簡化我們的程序(五)

這次要講的是:c++11中的bind和function std::function 它是函數、函數對象、函數指針、和成員函數的包裝器,可以容納任何類型的函數對象,函數指針,引用函數,成員函數的指針。以統一的方式處理函數、函數對象、函數指針、和成員函數。允許保存和延遲執行函數。 函數 ...

Thu Sep 05 05:44:00 CST 2013 2 9005
C++11 完美轉發

【1】為什么引入完美轉發? 在函數模板編程中,常有一種場景是把模板參數轉發給另一個調用函數,這時候如果只提供值傳遞版本會顯得效率太低。看以下代碼: 代碼很簡單,就是用ARG參數去初始化一個TYPE類型的對象,然后返回該對象指針。 考慮一下,如果ARG類型是一個自定義類型 ...

Mon Jan 27 19:46:00 CST 2020 0 5403
原創C++11改進我們的程序之簡化我們的程序(七)

這次要講的內容是:c++11中的tuple(元組)。tuple看似簡單,其實它是簡約而不簡單,可以說它是c++11中一個既簡單又復雜的東東,關於它簡單的一面是它很容易使用,復雜的一面是它內部隱藏了太多細節,要揭開它神秘的面紗時又比較困難。   tuple是一個固定大小的不同類型值的集合,是泛化 ...

Fri Sep 13 06:30:00 CST 2013 7 18676
原創C++11改進我們的程序之簡化我們的程序(一)

C++11在很多方面可以簡化我們的程序開發,我會在“簡化我們的程序”這一系列的博文中一一講到,敬請關注。這次要講的是:C++11如何通過獲取函數模板的返回值類型來簡化我們的程序。在談到簡化之前,我們先看一個問題,這個問題也是我前段時間在開發C++版本的linq時遇到的。假設我們現在需要將集合按某種 ...

Wed Aug 28 05:46:00 CST 2013 15 4339
原創C++11改進我們的程序之簡化我們的程序(四)

這次要講的是:c++11統一初始化、統一begin()/end()和for-loop循環如何簡化我們的程序 初始化列表 c++11之前有各種各樣的初始化語法,有時候初始化的時候還挺麻煩,比較典型的如vector和map的初始化。   這種寫法比較繁瑣,而且不 ...

Wed Sep 04 06:16:00 CST 2013 4 1975
原創C++11改進我們的程序之簡化我們的程序(六)

  這次要講的內容是:c++11中的lamda表達式。   lamda表達式是我最喜歡的一個c++11特性之一,在我的代碼中隨處可見它的身影,其實在c#3.5中就引入了lamda,java中至今還沒引入,要等明年的java8中才有lamda表達式,lamda來源於函數式編程的概念,也是現代 ...

Fri Sep 06 06:20:00 CST 2013 3 2895
原創C++11改進我們的程序之簡化我們的程序(二)

  這次要講的是:C++11如何通過組合函數來簡化我們的程序。關於組合函數,大家可能對這個概念有點陌生。組合函數是將N個一元函數組成一種更復雜的函數,每個函數的返回值作為參數傳給下一個函數,直到傳到最后一個函數結束。這種組合函數的能力可以使我們以一種更直觀的方式去完成復雜的鏈式執行行為。例如有三個 ...

Sat Aug 31 05:14:00 CST 2013 2 2399
原創C++11改進我們的程序之右值引用

本次主要講c++11中的右值引用,后面還會講到右值引用如何結合std::move優化我們的程序c++11增加了一個新的類型,稱作右值引用(R-value reference),標記為T &&,說到右值引用類型之前先要了解什么是左值和右值。左值具名,對應指定內存域,可訪問;右值 ...

Tue Oct 15 19:45:00 CST 2013 2 7410
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM