classctordfttype
;
使用=default限定符的建構函式,不需要實現,編譯器會自動生成預設的函式實現。
如果需要禁止類物件間的複製或者賦值,傳統的做法是將複製建構函式和賦值運算子設定為private。c++11提供了的=delete限定符用於實現類似的功能,=delete限定符可用於任何函式,主要用於類成員函式的訪問控制。
參考**如下:
classdelmodtype
;
需要說明的是=delete可用於普通成員函式。建議析構函式不要使用=delete限定符。
=delete限定符會傳遞,引起包含、引用該成員的類的自動生成的建構函式、析構函式、賦值運算子變成私有的。(這個私有建構函式乙個意思)
新的標準不建議使用私有建構函式、賦值運算子的形式。
c++11針對過載型別轉換運算子很容易誤用、濫用的問題,引入了explicit限定符用於描述轉換運算子的過載,必須顯示呼叫才可以進行轉換。示例**如下:
classexplicitconversion
};
c++11提供了override限定詞,用於顯示的說明子類中的某個介面是繼承自父類的,並且在子類中重寫了。其用法如下:
classbase
};class derived: public
base
};
c++11引入final關鍵字用於修飾類名字,表示該類是不能作為基類或父類的。
classnoderived final
{};
final也可以用於修飾成員函式,用於表示不能被重寫的成員函式。
c++11引入了繼承的建構函式,雖然說是繼承的,但是用法和實際意義不太一樣。使用using宣告引入這種機制。**如下:
classinbase
virtual ~inbase(){}
protected
:
intm_x, m_y;
};class inderived: public
inbase
;
子類inderived的建構函式等同於以下**:
class inderived: publicinbase
};
也就是說繼承的建構函式表示子類有乙個和父類同樣引數的建構函式。需要注意的是繼承的建構函式不支援預設引數的繼承。
所謂的右值引用指的是該物件即將銷毀,只有乙個指標或引用指向該物件,比較常見的比如字面量、棧中即將銷毀的變數。類似的右值引用如果存在指標或者其他動態動態分配的資源,我們可以使用移動建構函式或者移動賦值運算子將其資源重新使用,並將原有指標置空的機制。鑑於內容比較多,想深入了解的建議參考c++primer ch13.6或者c++11標準。
本文內容主要是關於 c++ primer 第五版的第13章到第15章中涉及c++11內容的整理。涉及default、delete、explicit、override、final等關鍵字、繼承建構函式、移動建構函式等機制。
c primer讀書筆記之c 11(四)
相信大家都用過列舉量,都是不帶有作用域的,在標頭檔案中定義需要特別注意不要出現重名的情況。為了解決這種問題,c 11提供了帶作用於的列舉。可以使用class enumname定義,示例 如下 enum enum class color 上面的是沒有作用域的列舉定義形式,下面是帶有作用域的列舉定義形式...
c primer讀書筆記之c 11(一)
c 提供了使用typedef定義的別名機制,但是有時候很難理解。為了更好的使用別名機制,c 11提供了新的別名定義機制,類似 如下 alias declarations using vint int type alias using pint int pointer alias using rint...
C 11特性 《深入理解C 11 讀書筆記
新增關鍵字 struct alignas 32 colorvector 沒有alignas關鍵字的話,對齊到8位,加上的話,對齊到32位,能提公升效率。對齊的資料在讀寫上會有效能上的優勢。比如頻繁使用的資料如果與處理器的快取記憶體器大小對齊,有可能提高快取的效能。而資料不對齊可能造成一些不良的後果,...