2024年6月29日,周日下午
例如,以下是一個常成員函數的示例:
class MyClass {
public:int getValue() const {return value;}
private:int value;
};
常成員函數是C++中一種特殊的成員函數,它具有以下特點:
- 不可修改對象狀態:常成員函數承諾不修改調用它的對象的狀態,包括其成員變量。在常成員函數的函數體內部,任何嘗試修改成員變量的操作都是非法的,并且會導致編譯錯誤。
- 常對象和常成員函數:只有常成員函數可以被常對象調用。如果一個對象被聲明為
const
,那么它只能調用類的常成員函數,不能調用非常成員函數。 - this指針類型:在常成員函數內部,
this
指針的類型是const
類類型指針,這意味著this
指針指向的對象是常量,不能通過this
指針修改對象的狀態。 - 調用限制:常成員函數不能調用非常成員函數,也不能調用其他非
const
成員函數。這是因為非常成員函數可能會修改對象的狀態,這與常成員函數的承諾相違背。 - 使用場景:常成員函數通常用于提供對對象狀態的只讀訪問,比如獲取對象的成員變量的值,或者執行一些不改變對象狀態的邏輯操作。
- 聲明和實現:在聲明常成員函數時,需要在函數簽名后面加上
const
關鍵字。在函數實現時,通常不需要再次添加const
,因為編譯器會根據函數聲明自動處理。
總而言之,最關鍵的點在于“常成員函數承諾不修改調用它的對象的狀態,包括其成員變量。”。
在這個例子中,getValue
是一個常成員函數,它返回 value
成員的值,但不會修改 value
的值。如果 MyClass
的一個對象被聲明為 const
,那么它可以調用 getValue
函數,但不能調用其他非常成員函數。