原创 C++11/14介紹(五)——智能指針和引用計數(三)

std::unique_ptr std::unique_ptr 是一種獨佔的智能指針,它禁止其他智能指針與其共享同一個對象,從而保證了代碼的安全: std::unique_ptr<int> pointer = std::make_

原创 C++11/14介紹(五)——智能指針和引用計數(二)

std::shared_ptr std::shared_ptr是一種智能指針,它能夠記錄多少個shared_ptr共同指向一個對象,從而消除顯式的調用delete,當引用計數變爲0時,就會將對象刪除。 std::make_shar

原创 C++11/14介紹(四)——新增容器(二)

無序容器 傳統 C++ 中的有序容器 std::map/std::set,這些容器內部通過紅黑樹進行實現,插入和搜索的平均複雜度均爲 O(log(size))。在插入元素時候,會根據 < 操作符比較元素大小並判斷元素是否相同,並選

原创 C++11/14介紹(四)——新增容器(一)

一、std::array std::array會在編譯時創建一個固定大小的數組,std::array不能夠被隱式的轉換成指針,使用std::array很簡單,只需指定其類型和大小即可: std::array<int, 4> arr

原创 C++11/14介紹(五)——智能指針和引用計數(一)

引用計數這種計數是爲了防止內存泄露而產生的。基本想法是對於動態分配的對象,進行引用計數,每當增加一次對同一個對象的引用,那麼引用對象的引用計數就會增加一次,每刪除一次引用,引用計數就會減一,當一個對象的引用計數減爲零時,就自動刪除

原创 C++11/14介紹(四)——新增容器(三)

一、元組std::tuple 傳統C++中的容器,除了std::pair外,沒有現成的數據結構能用來存放不同類型的數據,但是std::pair的缺陷是隻能保存;兩個元素。 二、元組基本操作 元組的使用有三個核心的函數: std:

原创 Linux內核簡介

內核 負責響應中斷的中斷服務程序 負責管理多個進程從而分享處理器時間的調度程序 負責管理進程地址空間的內存管理程序和網絡、進程間通信等服務程序 內核獨立於普通應用程序,一般處於系統態,擁有受保護的內存空間和訪問硬件

原创 常用C++11特性

詳細介紹:C++11/14 高速上手教程 一、右值引用與std::move 如下代碼: std::string tmp("bert") std::string name(tmp) 第一行聲明瞭一個對象tmp,用"bert"字符串

原创 C++11/14介紹(三)——語言運行期的強化(二)

函數對象包裝器 一、std::function Lambda表達式的本質是一個函數對象,當lambda表達式的捕獲列表爲空時,Lambda表達式還能作爲一個函數指針進行傳遞: #include <iostream> using

原创 C++11/14介紹(三)——語言運行期的強化(三)

右值引用 一、左值,右值的純右值、將亡值,右值 左值:賦值符號左邊的值。左值是表達式後依然存在的持久對象 右值:右邊的值。指表達式結束後就不在存在的臨時對象,C++11中爲了引入強大的右值引用,將右值的概念進行了進一步的劃

原创 C++11/14介紹(三)——語言運行期的強化(一)

Lambda表達式 lambda表達式的基本語法如下: [捕獲列表](參數列表) mutable(可選) 異常屬性 -> 返回類型{ //函數體 } 捕獲列表可以理解爲參數的一種類型,lambda表達式內部函數體在默

原创 C++11/14 高速上手教程

目錄(更新ing) 1、棄用特性和與C語言的兼容性 2、語言可用性的強化 2.1、nullptr與constexpr 2.2、類型推導 2.3、區間迭代 2.4、初始化列表 2.5、模板增強 2.6、面向對

原创 C++11/14介紹(二)——語言可用性的強化(七)

強類型枚舉 在傳統 C++中,枚舉類型並非類型安全,枚舉類型會被視作整數,則會讓兩種完全不同的枚舉類型可以進行直接的比較(雖然編譯器給出了檢查,但並非所有),甚至枚舉類型的枚舉值名字不能相同,這不是我們希望看到的結果。 C

原创 C++11/14介紹(二)——語言可用性的強化(五)

模板增強 一、外部模板 傳統 C++ 中,模板只有在使用時纔會被編譯器實例化。換句話說,只要在每個編譯單元(文件)中編譯的代碼中遇到了被完整定義的模板,都會實例化。這就產生了重複實例化而導致的編譯時間的增加。並且,我們沒有辦法

原创 C++11/14介紹(二)——語言可用性的強化(四)

初始化列表 提起初始化列表,首先想到的是類的構造函數的初始化列表: class test { private: int x,y; public: test(int a,int b):x(a),y(b){} }