->字面量literal 是指在源代碼中寫出的固定常量,在C++98中只能是原生類型:
字符串字面量"hello"->const char[6]
整數(shù)字面量 1-> int
浮點數(shù)字面量 0.0 -> double
浮點數(shù)字面量 3.14f -> float
無符號長整數(shù)字面量 unsigned long -> 123456789ul
->C++11引入了自定義字面量,可以使用operator""后綴來將用戶提供的字面量轉(zhuǎn)換成實際的類型。
operator""s用于定義std::string;h min s ms us ns用于創(chuàng)建std::chrono::duration;
i il if 用于創(chuàng)建復數(shù)complex<double> complex<long double> complex<float>
length operator"" _m(double v)
{
? ? return length(XXX);
}
this_thread::sleep_for(500ms);
cout << "hello world"s.substr(0, 5) << endl;
->C++14引入了二進制字面量
unsigned int mask = 0b11100000;
但是IOstream中只有dec hex oct三個操作器manipulator,沒有bin,所以不能直接輸出二進制數(shù)??梢杂?/p>
cout << bitset<8>(mask) << endl;
->靜態(tài)斷言
C++98的assert允許在運行時檢查一個函數(shù)的前置條件是否成立。沒有方法允許開發(fā)人員在編譯的時候檢查假設是否成立。
C++11提供了靜態(tài)斷言機制。static_assert(編譯期條件表達式,可選輸出信息)
static_assert((alignment & (alignment - 1)) == 0, "Alignment must be power of two");
->C++14引入了數(shù)字分隔符
用于數(shù)字較長的時候增加可讀性。C++14開始允許數(shù)字型字面量中任意添加',具體如何添加,由程序員根據(jù)實際情況進行約定。
->default 和 delete 成員函數(shù)
默認構(gòu)造函數(shù) 析構(gòu)函數(shù) 拷貝構(gòu)造函數(shù) 拷貝賦值函數(shù) 移動構(gòu)造函數(shù) 移動賦值函數(shù)
生成(或不生成)這些函數(shù)的規(guī)則
->override final 說明符
C++11引入的新說明符。加在類成員函數(shù)的聲明的尾部??梢詥蝹€或組合使用。不是關(guān)鍵字,變量名仍可以用這兩個字符。
override顯示聲明了成員函數(shù)是一個虛函數(shù)且覆蓋了基類中的該函數(shù)。作用:
給開發(fā)人員明確的提示,這個函數(shù)覆蓋了基類的成員函數(shù);讓編譯器進行額外的檢查,防止拼寫錯誤或代碼改動沒有讓基類和派生類的成員函數(shù)名稱完全一致。
final則聲明了成員函數(shù)是一個虛函數(shù),且該虛函數(shù)不可在派生類中被覆蓋。如果有一點沒有滿足的話,編譯器會報錯。final用在被定義的類或者結(jié)構(gòu)名后面,作用是標志這個類或者結(jié)構(gòu)不可被派生。