2010-03-13 18 views
3

Quelqu'un peut-il montrer un exemple vivant de l'utilisation du mutable mot-clé, lorsqu'il est utilisé dans une fonction const et expliquer dans un exemple en direct sur la fonction mutable et const et aussi la différence pour le membre volatile et fonction.langage C de quelques exemples en direct pour mutable

+1

Copie possible: http://stackoverflow.com/questions/105014/c-mutable-keyword – dirkgently

Répondre

6

Vous pouvez utiliser mutable pour les variables autorisées à être modifiées dans les instances d'objet const. C'est ce qu'on appelle la constance logique (opposée à la constance au niveau du bit) car l'objet n'a pas changé du point de vue de l'utilisateur.

Vous pouvez par exemple mettre en cache la longueur d'une chaîne pour augmenter les performances.

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

l'autre endroit où je les utilise est dans les itérateurs, où const se réfère aux valeurs de l'itérateur, plutôt que l'index de l'itérateur (qui doit être modifiable) – Anycorn

+0

donc vous définissez les const itéateurs comme const_iterators ... Je n'ai jamais compris pourquoi il y avait deux types différents. –

+1

@Alexandre: Parce que la constance de l'itérateur et la constance de la valeur qu'il référence sont deux choses très différentes. –

1

Vous pouvez utiliser mutable sur un compteur qui suit le nombre d'accès à un membre de la classe via un accesseur const.

1

Je l'ai utilisé une fois pour mettre en œuvre memoization.