this 指標的類型
this 指標的類型可以在函式宣告中藉由 const 和 volatile 關鍵字修改。 若要將函式宣告為擁有一個或多個這些關鍵字的屬性,請在函式引數清單後面加入關鍵字。
請考量以下範例:
// type_of_this_pointer1.cpp
class Point
{
unsigned X() const;
};
int main()
{
}
上述程式碼會宣告成員函式 X,其中 this 指標會視為 const 物件的 const 指標。 您可以使用 cv-mod-list 選項的組合,但是這些組合一定會修改 this 所指向的物件,而非 this 指標本身。 因此,下列宣告會宣告 X 函式,而 this 指標是 const 物件的 const 指標:
// type_of_this_pointer2.cpp
class Point
{
unsigned X() const;
};
int main()
{
}
成員函式中 this 的類型會以下列語法描述,其中 cv-qualifier-list 是從成員函式宣告子判斷而來,而且可以是 const 或 volatile (或兩者皆是),class-type 則是類別的名稱:
[cv-qualifier-list] class-type * const this
換句話說,this 永遠是 const 指標,而且無法重新指派。成員函式宣告中使用的 const 或 volatile 限定詞適用於 this 於該函式範圍內所指向的類別執行個體。
下表將進一步說明這些修飾詞的運作方式。
修飾詞的語意
修飾詞 |
意義 |
---|---|
const |
無法變更成員資料,也無法叫用非 const 的成員函式。 |
volatile |
每次存取成員時,就會從記憶體載入成員資料,而且會停用某些最佳化。 |
將 const 物件傳遞至非 const 的成員函式會發生錯誤。 同樣地,將 volatile 物件傳遞至非 volatile 的成員函式也會發生錯誤。
宣告為 const 的成員函式無法變更成員資料,在這類函式中,this 指標是 const 物件的指標。
注意事項 |
---|
建構函式和解構函式不能宣告為 const 或 volatile。不過,它們可以在 const 或 volatile 物件上叫用。 |