《深入理解C 11 新特性解析與應用》 讀書筆記

2021-08-14 06:54:06 字數 928 閱讀 3729

第六章 在 c++ 11中,nullptr 是乙個所謂的 「指標空值型別」 的常量,指標空值型別被命名為nullptr_t。 nullptr 是有型別的,且可以被隱式地轉化為指標型別。

第二章異常機制會帶來一些額外開銷,比如函式丟擲異常,會導致函式棧被依次地展開,並依幀呼叫在本幀中已構造的自動變數的析構函式等。在c++11 中,如果noexcept 修飾的函式丟擲了異常,編譯器可以選擇直接呼叫std::terminate() 終止程式執行。

第三章

左值、右值和右值引用

a = b + c

可以取位址的、有名字的就是左值,反之不能取位址的、沒有名字的就是右值。

&a 允許,則是左值;&(b+c) 不能通過編譯,因而(b+c) 是右值。

右值由兩個概念組成,乙個是將亡值(xvalue, expiring value), 另乙個則是純右值(prvalue, pure rvalue)

其中 純右值就是c++98 標準中右值得概念,講的是用於辨識臨時變數和一些不跟物件關聯的值。比如非引用返回的函式返回的臨時變數值,一些運算表示式,比如1+3 產生的臨時變數值,也是純右值。

將亡值則是c++11 新增的跟右值引用相關的表示式,這樣表示式通常是將要被移動的物件(移為他用),比如返回右值引用 t&& 的函式返回值、std::move的返回值,或者轉換為t&& 的型別轉換函式的返回值。而剩餘的,可以標識函式、物件的值都屬於左值。在c++11 的程式中,所有的值必屬於左值、將亡值、純右值三者之一。

右值引用就是乙個右值進行引用的型別。

t&& a = returnrvalue();

t b = returnrvalue();

少一次物件的析構和一次物件的構造。

std::move 的作用是強制乙個左值稱為右值。

從實現上講,std::move 基本等同於乙個型別轉換

static_cast

C 11特性 《深入理解C 11 讀書筆記

新增關鍵字 struct alignas 32 colorvector 沒有alignas關鍵字的話,對齊到8位,加上的話,對齊到32位,能提公升效率。對齊的資料在讀寫上會有效能上的優勢。比如頻繁使用的資料如果與處理器的快取記憶體器大小對齊,有可能提高快取的效能。而資料不對齊可能造成一些不良的後果,...

C 11新特性解析與應用 lambda部分

lambda 的 方式,根據lambda的實現知道 方式為傳值,在lambda定義的時候,初始化狀態就確定了 方式為引用,那麼引用的物件或者變數,會根據lambda執行的時候,再確定初始化狀態 這一點很重要 我們可以用 typeid lambda name 來看看不同編譯器,對於lambda的型別到...

深入理解C 11(九)

move語義 我們知道移動語義是通過右值引用來匹配臨時值的,那麼,普通的左值是否也能借助移動語義來優化效能呢,那該怎麼做呢?事實上c 11為了解決這個問題,提供了std move方法來將左值轉換為右值,從而方便應用移動語義。move是將物件的狀態或者所有權從乙個物件轉移到另乙個物件,只是轉移,沒有記...