c++ 基礎語法部分
阿新 • • 發佈:2021-01-21
1 this指標
c++ 程式碼轉換為c語言程式碼簡要:
注意事項:
- C++中this關鍵字是一個指向物件自己的一個常量指標,不能給this賦值;
- 只有成員函式才有this指標,友元函式不是類的成員函式,沒有this指標;
- 同樣靜態函式也是沒有this指標的,靜態函式如同靜態變數一樣,不屬於具體的哪一個物件;
- this指標作用域在類成員函式內部,在類外也無法獲取;
- this指標並不是物件的一部分,this指標所佔的記憶體大小是不會反應在sizeof操作符上的。
2 c++11 新特性
2.1 auto和decltype 型別推導
- 語法格式:
其中,varname 表示變數名,value 表示賦給變數的值,exp 表示一個表示式,方括號auto varname = value; //auto的語法格式 decltype(exp) varname [= value]; //decltype的語法格式
[ ]
表示可有可無。 - 區別:
auto 和 decltype 都會自動推匯出變數 varname 的型別:- auto 根據
=
右邊的初始值 value 推匯出變數的型別; - decltype 根據 exp 表示式推匯出變數的型別,跟
=
右邊的 value 沒有關係。 - auto 要求變數必須初始化,也就是在定義變數的同時必須給它賦值;而 decltype 不要求,初始化與否都不影響變數的型別。因為 auto 是根據變數的初始值來推匯出變數型別的,如果不初始化,變數的型別也就無法推導。
- auto 根據
2.2 volatile 和 const 限定符
- const 關鍵字用來表示資料是隻讀的,也就是不能被修改;
- volatile 和 const 是相反的,它用來表示資料是可變的、易變的,目的是不讓 CPU將資料快取到暫存器,而是從原始的記憶體中讀取。
2.3 智慧指標
2.3.1 shared_ptr
2.3.1.1 shared_ptr 建立
詳見網站:[shared_ptr]shared_ptr(https://zh.cppreference.com/w/cpp/memory/shared_ptr)
2.3.1.2 shard_ptr 功能
- 多個 shared_ptr 物件可託管同一物件指標,系統會維護一個託管計數,當無shared_ptr託管該指標時,delete該指標
- shared_ptr物件不能託管指向動態分配的陣列的指標,否則程式執行出錯。
2.3.2 unique_ptr
2.4 右值和move語義
- 右值:不能取地址的表示式,不在記憶體中佔有確定位置的表示式。
- 左值:能取地址的表示式,在記憶體中佔有確定位置的物件
- 左值引用: 使用 "&" 表示
int &b = num;
- 右值引用:用 "&&" 表示
int && a = 10;
- move 語義:
內部實現:
物件要實現轉移建構函式。// FUNCTION TEMPLATE move template <class _Ty> _NODISCARD constexpr remove_reference_t<_Ty>&& move(_Ty&& _Arg) noexcept { // forward _Arg as movable return static_cast<remove_reference_t<_Ty>&&>(_Arg); }
詳細介紹
2.5 lambda表示式
待補充
2.6 強制型別轉換
強制型別轉換說明:
強制型別轉換 | 說明 |
---|---|
static_cast | 用於基本型別之間、有繼承關係的類物件之間、類指標之間的轉換; 不能用於基本型別指標之間的轉換 |
const_cast | 用於去除變數的只讀屬性; 強制轉換的目標型別必須是指標或引用 |
reinterpret_cast | 用於指標型別之間、整數和指標型別之間的轉換,非常不安全 |
dynamic_cast | 用於有繼承關係的類指標之間、有交叉關係的類指標之間的轉換; 具有型別檢查的功能; 需要虛擬函式的支援 |
注意事項:
- static_cast 不能用於無關型別之間的轉換