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
Répondre
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;
};
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
donc vous définissez les const itéateurs comme const_iterators ... Je n'ai jamais compris pourquoi il y avait deux types différents. –
@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. –
Vous pouvez utiliser mutable sur un compteur qui suit le nombre d'accès à un membre de la classe via un accesseur const.
Je l'ai utilisé une fois pour mettre en œuvre memoization.
Copie possible: http://stackoverflow.com/questions/105014/c-mutable-keyword – dirkgently