根據MSDN:「當遵循成員函數的參數列表時,const關鍵字指定該函數不會修改爲其調用的對象。」const在函數/方法簽名後的含義是什麼?
有人可以澄清這一點嗎?這是否意味着函數不能修改任何對象的成員?
bool AnalogClockPlugin::isInitialized() const
{
return initialized;
}
根據MSDN:「當遵循成員函數的參數列表時,const關鍵字指定該函數不會修改爲其調用的對象。」const在函數/方法簽名後的含義是什麼?
有人可以澄清這一點嗎?這是否意味着函數不能修改任何對象的成員?
bool AnalogClockPlugin::isInitialized() const
{
return initialized;
}
這意味着該方法不修改成員變量(除了成員聲明爲mutable
),因此它可以在類的恆定實例調用。
class A
{
public:
int foo() { return 42; }
int bar() const { return 42; }
};
void test(const A& a)
{
// Will fail
a.foo();
// Will work
a.bar();
}
編譯器不會允許const成員函數來改變*這或者 調用非const成員函數此對象
作爲回答@delroth這意味着該成員函數沒有按除了那些聲明爲可變的變量外,不要修改任何變量。你可以看到在C++ here
還要注意const正確性良好的常見問題,雖然成員函數不能修改的成員變量沒有標記爲可變的,如果成員變量的指針,成員函數可能無法修改指針值(即指針指向的地址),但它可以修改指針指向的內容(實際內存區域)。
因此,例如:
class C
{
public:
void member() const
{
p = 0; // This is not allowed; you are modifying the member variable
// This is allowed; the member variable is still the same, but what it points to is different (and can be changed)
*p = 0;
}
private:
int *p;
};
[當其它的參照類的聲明之後「這個」(http://stackoverflow.com/questions/10982628/non-member-function-cannot- have-cv-qualifier) – 2016-12-03 11:35:00