2009-10-11 65 views
28

根據MSDN:「當遵循成員函數的參數列表時,const關鍵字指定該函數不會修改爲其調用的對象。」const在函數/方法簽名後的含義是什麼?

有人可以澄清這一點嗎?這是否意味着函數不能修改任何對象的成員?

bool AnalogClockPlugin::isInitialized() const 
{ 
    return initialized; 
} 
+0

[當其它的參照類的聲明之後「這個」(http://stackoverflow.com/questions/10982628/non-member-function-cannot- have-cv-qualifier) – 2016-12-03 11:35:00

回答

33

這意味着該方法不修改成員變量(除了成員聲明爲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(); 
} 
+0

你能澄清「常量?」嗎?也許有一點代碼? – Scott 2009-10-11 04:50:08

+1

劃痕。看起來你畢竟提供了一些代碼。 – Scott 2009-10-11 04:50:43

+1

你會想要閱讀關於C++常量。你需要在const STL對象上使用const_iterator,等等。 – nall 2009-10-11 04:55:07

2

編譯器不會允許const成員函數來改變*這或者 調用非const成員函數此對象

2

作爲回答@delroth這意味着該成員函數沒有按除了那些聲明爲可變的變量外,不要修改任何變量。你可以看到在C++ here

16

還要注意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; 
}; 
+1

好點。這是const-pointer-to-int,const-int指針和const-pointer-const-int之間的區別。 const方法使指針爲常量。 – UncleBens 2009-10-11 11:06:36

+0

您可能的意思是「......成員變量_不被標記爲可變......」。 – sbi 2009-10-11 12:36:13

+0

糟糕,哈哈。對於那個很抱歉。 – blwy10 2009-10-11 13:26:50

相關問題