C++基礎(chǔ)語法梳理:const,static以及 this 指針

const
作用
修飾變量,說明該變量不可以被改變;
修飾指針,分為指向常量的指針(pointer to const)和自身是常量的指針(常量指針,const pointer);
修飾引用,指向常量的引用(reference to const),用于形參類型,即避免了拷貝,又避免了函數(shù)對值的修改;
修飾成員函數(shù),說明該成員函數(shù)內(nèi)不能修改成員變量。
const 的指針與引用
指針
指向常量的指針(pointer to const)
自身是常量的指針(常量指針,const pointer)
引用
指向常量的引用(reference to const)
沒有 const reference,因為引用只是對象的別名,引用不是對象,不能用 const 修飾
(為了方便記憶可以想成)被 const 修飾(在 const 后面)的值不可改變,如下文使用例子中的?p2、p3
const 使用

static
作用
修飾普通變量,修改變量的存儲區(qū)域和生命周期,使變量存儲在靜態(tài)區(qū),在 main 函數(shù)運(yùn)行前就分配了空間,如果有初始值就用初始值初始化它,如果沒有初始值系統(tǒng)用默認(rèn)值初始化它。
修飾普通函數(shù),表明函數(shù)的作用范圍,僅在定義該函數(shù)的文件內(nèi)才能使用。在多人開發(fā)項目時,為了防止與他人命名空間里的函數(shù)重名,可以將函數(shù)定位為 static。
修飾成員變量,修飾成員變量使所有的對象只保存一個該變量,而且不需要生成對象就可以訪問該成員。
修飾成員函數(shù),修飾成員函數(shù)使得不需要生成對象就可以訪問該函數(shù),但是在 static 函數(shù)內(nèi)不能訪問非靜態(tài)成員。

this 指針
this?指針是一個隱含于每一個非靜態(tài)成員函數(shù)中的特殊指針。它指向調(diào)用該成員函數(shù)的那個對象。
當(dāng)對一個對象調(diào)用成員函數(shù)時,編譯程序先將對象的地址賦給?this?指針,然后調(diào)用成員函數(shù),每次成員函數(shù)存取數(shù)據(jù)成員時,都隱式使用?this?指針。
當(dāng)一個成員函數(shù)被調(diào)用時,自動向它傳遞一個隱含的參數(shù),該參數(shù)是一個指向這個成員函數(shù)所在的對象的指針。
this?指針被隱含地聲明為:?ClassName *const this,這意味著不能給?this?指針賦值;在?ClassName?類的?const?成員函數(shù)中,this?指針的類型為:const ClassName* const,這說明不能對?this?指針?biāo)赶虻倪@種對象是不可修改的(即不能對這種對象的數(shù)據(jù)成員進(jìn)行賦值操作);
this?并不是一個常規(guī)變量,而是個右值,所以不能取得?this?的地址(不能?&this)。
在以下場景中,經(jīng)常需要顯式引用?this?指針:
為實現(xiàn)對象的鏈?zhǔn)揭茫?/p>
為避免對同一對象進(jìn)行賦值操作;
在實現(xiàn)一些數(shù)據(jù)結(jié)構(gòu)時,如?list。
寫在最后:對于準(zhǔn)備學(xué)習(xí)C/C++編程的小伙伴,如果你想更好的提升你的編程核心能力(內(nèi)功)不妨從現(xiàn)在開始!
微信公眾號:C語言編程學(xué)習(xí)基地
整理分享(多年學(xué)習(xí)的源碼、項目實戰(zhàn)視頻、項目筆記,基礎(chǔ)入門教程)
歡迎轉(zhuǎn)行和學(xué)習(xí)編程的伙伴,利用更多的資料學(xué)習(xí)成長比自己琢磨更快哦!
