本編文章主要是將作者在學習c++中遇到的關鍵字進行了總結,作者對比較陌生的關鍵字進行了解釋
- alignas 設置類和struct的字節對齊方式 默認取值爲:0 1 2 4 6 8
- alignof 區分sizeof(),alignof得到字節對齊的字節數
- ISO646標準支持的運算符:
- asm 允許在c/c++的程序中直接插入彙編指令,並且可以插在任何位置
- assert 運行時斷言,assert的作用是先計算表達式expression,如果其值爲假(即爲0),那麼它先向 stderr打印一條錯誤的信息,然後通過調用abort來中止運行
- auto
- bool
- break
- case 和switch一起使用
- catch 和try一起使用,表示異常
- char 在linux平臺下等價於 unsigned char 在window平臺下等價於signed char
- char16_t char32_t unicode編碼
- class 類
- concept
- const 不變性
- constexpr 是“常量表達式”,在編譯期可求值的表達式。最基礎的常量表達式就是字面值或全局變量/函數的地址或sizeof等關鍵字。constexpr所修飾的變量一定是編譯期可求值的,所修飾的函數在所有參數是constexpr是,一定會返回constexpr。還可以修飾類的構造函數,但是,constexpr構造函數必須有一個空的函數體,即所有成員變量的初始化都放到初始化函數列表中。
- const_cast 用來修改類型的const或volatile,使用該運算方法可以返回一個指向非常量的指針(或引用)指向b1,就可以通過該指針(或引用)對它的數據成員任意改變。
用法:
const_cast<type_id> (expression)
該運算符用來修改類型的const或volatile屬性。除了const 或volatile修飾之外, type_id和expression的類型是一樣的。
一、常量指針被轉化成非常量的指針,並且仍然指向原來的對象;
二、常量引用被轉換成非常量的引用,並且仍然指向原來的對象;
三、const_cast一般用於修改底指針。如const char *p形式。 - continue
- decltype
用法:
返回值 decltype(表達式)
返回值的類型是表達式參數的類型- 如果這個表達式是函數,decltype給出的類型爲函數返回值的類型
- 如果表達式是一個左值類型,那麼decltype給出的類型爲表達式左值引用類型
- decltype不會執行表達式而auto會執行表達式
- 跟蹤返回類型
函數的返回值類型一般是放在函數名的前面,但是c++11可以將函數的返回值類型放在函數聲明的後面,同時需要auto替代返回類型
eg:
template<class U, class V>
auto Multiply(U u, V v) -> decltype(u*v)
{
return u*v;
}
- default
- delete
- do
- double
- dynamic_cast
將一個基類對象指針(或引用)轉換到繼承類指針,dynamic_cast會根據基類指針是否真正指向繼承類指針來做相應處理
用法:
dynamic_cast (expression)
該運算符把expression轉換成type_id類型的對象,type_id必須是類的指針、類的引用或者void*
如果 type-id 是類指針類型,那麼expression也必須是一個指針,如果type-id 是一個引用,那麼 expression 也必須是一個引用。 - else
- enum
- 普通用法:
enum Day {Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday}; - 強枚舉類型(使用enum class語法來聲明):
enum class enumeration{
value1,
value2,
value3 = 100,
value4
};
另外枚舉類型所使用的類型爲默認爲int類型,也可指定爲其他類型:
enum class enumeration:short{
value1,
value2
};
- 普通用法:
- explicit 可以抑制內置類型的強制轉換,因此在類的構造函數中,應該儘可能地使用關鍵字explicit,防止不必要地隱式轉換
- export
- extern 用在變量或者函數的聲明前,用來說明“此變量/函數是在別處定義的,要在此處引用”
- false
- float
- for
- friend
- goto
- if
- Inline 放在函數定義的前面,使函數成爲內聯函數,建議編譯器直接調用函數體來替代函數調用
- int
- Long
- mutable
- namespace 命名空間
- new
- noexcept 告訴編譯器,函數中不會發生異常,如果在運行是,noexcept函數向外拋出了異常(如果函數內部捕捉了異常並完成處理,這種情況不算是拋出異常),程序會直接中止,調用std::terminate()函數,該函數內部會調用std::abort()中止程序
- nullptr 空指針 在c++11中是一個類型
- operator 重載
- private
- protected
- public
- register 告訴編譯器將變量放到寄存器中
- reinterpret_cast 強制類型轉換符
語法:
reinterpret_cast (expression)
Type-id必須是一個指針、引用、算術類型、函數指針或者成員指針。它可以把一個指針轉換成一個整數,也可以把一個整數轉換成指針。
用法:
該操作符修改了操作數類型,但僅僅是重新解釋了給出的對象的比特模型而沒有進行二進制轉換 - requires
- return
- short
- signed
- sizeof 查詢對象或類型的大小
- static static修飾普通變量函數
static放在類中進行修飾屬性和方法 - static_assert 編譯期間實現斷言,是靜態斷言。不會生成目標代碼,不會造成任何的性能損失
語法:
static_assert(常量表達式,要提示的字符串);
如果第一個參數常量的表達式是false,會產生一條編譯錯誤,錯誤的位置就是static_assert語句所在的行,第二個參數就是錯誤提示字符串。然後通過調用abort()來中止運行 - static_cast 功能是把一個表達式轉換爲某種類型,但是運行時類型檢查來保證轉化的安全性
語法:
static_cast<type_id>(expression)
把expression類型轉換爲type_id類型 - struct
- switch
- template
- this
- thread_local
- Throw 和try、catch一起用
- true
- try
- typedef 起別名
- typeid
- typename
- union
- unsigned
- using 在c++11中可以使用using來替代typedef
- virtual 虛函數
- void
- volatile 作用就是防止編譯器對代碼進行優化
- wchar_t 在windows編程下用的多
- while