C++primer1-7章知識點總結——頂層const與底層const
頂層const表示任意物件/資料型別本身為常量
底層const與指標和引用等複合型別的基本型別有關
注:
(1)用於宣告引用的const都是底層const
(2)指標型別既可以是頂層const也可以是底層const
eg:
int i = 0;
int *const p1 = &i; //p1為頂層const,其值不能改變
const int ci = 42; //ci為頂層const,其值不能改變
const int *p2 = &ci; //允許改變p2的值,這是一個底層const
const int *const p3 = p2; //靠右的為頂層const,靠左的為底層const
const int &r = ci; //用於宣告引用的都為底層const
注:底層const的限制:
當執行拷貝操作時,拷入和拷出的物件必須具有相同的底層const資格,或者,兩個物件的資料型別必須能夠轉換。一般來說非常量可以轉換為常量,反之則不行。
具體操作例項:
eg:
i = ci; //正確,ci頂層const不受影響
p2 = p3;//正確,p2和p3指向的物件都相同,且p3又是一個頂層const其本身也為常量
int *p = p3; //錯誤,p3包含底層const定義但是p沒有
p2 = &i;//正確,int i 可以轉換為常量
int &ri = ci;//錯誤,普通的int &不能繫結到int常量上
const int &r2 = i;//正確,const int& 可以繫結到一個普通的int上
補充:
vector<int>::iterator /*可以理解為*/ int* //代表非常量
vector<int>::const_iterator /*可以理解為*/ const int* //代表底層const
const vector<int>::iterator /*可以理解為*/ int* const //代表頂層const
const vector<int>::iterator /*可以理解為*/ const int* const //左側的const為底層const,右側的頂層const
相關文章
- 頂層const和底層const
- C++ 頂層const底層constC++
- 【C++100問】深入理解理解頂層const和底層constC++
- C++primer1-7章知識點總結——sizeof運算子C++
- C++primer1-7章知識點總結——顯示轉換C++
- var、let和const的知識點
- WEB層知識點Web
- Const 用法總結
- iOS底層面試總結iOS面試
- 計算機網路知識點總結(一)-物理層計算機網路
- C++primer1-7章知識點總結——vector以及迭代器的相關運用C++
- 物理層知識點提要
- C++ const 總結C++
- iOS底層原理總結 – RunLoopiOSOOP
- iOS底層原理總結 - RunLoopiOSOOP
- C/C++ Const 小知識C++
- 交換機基礎知識總結之層數
- iOS底層GCD (技術總結)iOSGC
- 63_索引管理_核心級知識點:深入探秘type底層資料結構索引資料結構
- 【原創】探索容器底層知識之Namespacenamespace
- 必備知識點 模型層ORM模型ORM
- const特性總結(不斷更新)
- C++中const用法總結C++
- Kotlin知識歸納(三) —— 頂層成員與擴充套件Kotlin套件
- C++中const與指標、引用的總結C++指標
- iOS底層原理總結 -- 利用Runtime原始碼 分析Category的底層實現iOS原始碼Go
- const * and * const
- C++知識點隨筆(三):static、const、friend、inlineC++inline
- iOS底層原理總結 - Category的本質iOSGo
- C/C++——const用法完整總結C++
- 知識點總結
- 底層原理面試彙總面試
- 程式設計師是否需要學習底層知識程式設計師
- linux知識知識點總結Linux
- 初識LinkedList底層原理
- iOS底層原理總結 - 探尋KVO本質iOS
- 關於C++ const 的全面總結C++
- 【轉】Const,Const函式,Const變數,函式後面的Const函式變數