C ++ язык несколько живых примеров для изменчивых - PullRequest
3 голосов
/ 13 марта 2010

Может ли кто-нибудь показать живой пример использования ключевого слова mutable, когда оно используется в функции const, и объяснить в реальном примере о mutable и const функции, а также разницу для volatile член и функция.

Ответы [ 3 ]

6 голосов
/ 13 марта 2010

Вы можете использовать mutable для переменных, которые могут быть изменены в экземплярах объекта const. Это называется логической константностью (в отличие от битовой константности), поскольку объект не изменился с точки зрения пользователя.

Например, вы можете кэшировать длину строки для увеличения производительности.

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;
};
1 голос
/ 30 июня 2010

Я использовал его один раз для реализации памятки .

1 голос
/ 30 июня 2010

Вы можете использовать mutable на счетчике, отслеживая количество обращений к члену класса через средство доступа const.

...