2010-03-13 58 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访问器访问类成员的次数。