如果你希望編譯執行這一點,那麼宣佈該成員函數const
:
bool contains(string word) const
{
...
}
甲const
功能不允許莫不同的是它的成員變量,並且只能調用其他const
成員函數(它自己或成員變量的成員函數)。
此規則的例外是成員變量聲明爲mutable
。 [但不應將mutable
用作通用const
解決方法;它才真正意味着當物件的情況的「觀察的」狀態應該是const
,但內部實現(如引用計數或懶惰的評價)仍然需要改變。]也
注意const
不通過例如傳播指針。
因此,在總結:
class Thingy
{
public:
void apple() const;
void banana();
};
class Blah
{
private:
Thingy t;
int *p;
mutable int a;
public:
Blah() { p = new int; *p = 5; }
~Blah() { delete p; }
void bar() const {}
void baz() {}
void foo() const
{
p = new int; // INVALID: p is const in this context
*p = 10; // VALID: *p isn't const
baz(); // INVALID: baz() is not declared const
bar(); // VALID: bar() is declared const
t.banana(); // INVALID: Thingy::banana() is not declared const
t.apple(); // VALID: Thingy::apple() is declared const
a = 42; // VALID: a is declared mutable
}
};
+1爲指針的東西,因爲'const'只適用於頂層(即不能改變指針本身,只能指向對象)。 – Xeo 2011-06-02 10:36:49
像Xeo說非常酷的示例與ponters ... + 1 ofc :) – NoSenseEtAl 2011-06-02 10:44:14
其實你應該提到關於可變關鍵字 – 2011-06-02 10:52:03