2010-03-13 59 views
3

能有人告訴mutable關鍵字的使用,一個活生生的例子一些活生生的實例,當它在一個const函數用於解釋在一個活生生的例子對mutableconst功能也差爲volatile成員和功能。C++語言可變

+1

可能的重複:http://stackoverflow.com/questions/105014/c-mutable-keyword – dirkgently 2010-03-13 11:57:15

回答

6

對於const對象實例中允許修改的變量,您可以使用mutable。這被稱爲邏輯常量(與逐位常數相反),因爲從用戶的角度來看對象沒有改變。

例如,您可以緩存字符串的長度以提高性能。

class MyString 
{ 
public: 
... 

const size_t getLength() const 
{ 
    if(!m_isLenghtCached) 
    { 
     m_length = doGetLength(); 
     m_isLengthCached = true; 
    } 

    return m_length;  
} 

private: 
sizet_t doGetLength() const { /*...*/ } 
mutable size_t m_length; 
mutable bool m_isLengthCached; 
}; 
+2

我使用它們的其他地方是在迭代器中,其中const指的是迭代器值,而不是迭代器索引(它必須是可變的) – Anycorn 2010-03-13 16:57:12

+0

所以你定義常量迭代器是const_iterators ......我從來沒有理解爲什麼有兩種不同的類型。 – 2010-06-30 12:13:25

+1

@Alexandre:因爲迭代器的常量和它引用的值的常量是兩個完全不同的東西。 – 2010-06-30 12:34:02

1

您可以在計數器上使用mutable來跟蹤通過const訪問器訪問類成員的次數。