L' mutable
de mots clés est une façon de percer l' const
voile de vous draper sur vos objets. Si vous avez un const référence ou un pointeur vers un objet, vous ne pouvez pas modifier l'objet en aucune façon , sauf quand et comment elle est marquée mutable
.
Avec votre const
de référence ou un pointeur vous sont limitées à:
- accès en lecture seule pour tout visible par les membres de données
- l'autorisation d'appeler que des méthodes qui sont marqués comme
const
.
L' mutable
d'exception fait de sorte que vous pouvez maintenant écrire ou de données ensemble de membres qui sont marqués mutable
. C'est la seule visible de l'extérieur de la différence.
En interne, ces const
méthodes qui sont visibles, vous pouvez aussi écrire des données sur des membres qui sont marqués mutable
. Essentiellement la const voile est percé de manière exhaustive. Il est complètement à l'API concepteur de s'assurer que mutable
ne pas détruire l' const
concept et est utilisé uniquement utile dans des cas particuliers. L' mutable
mot-clé aide parce qu'il marque clairement des données des membres qui sont soumis à ces cas particuliers.
Dans la pratique, vous pouvez utiliser const
obsessionnelle tout au long de votre base de code (vous voulez "infecter" de votre base de code avec l' const
"maladie"). Dans ce monde, les pointeurs et les références sont const
à de très rares exceptions, produisant un code qui est plus facile à comprendre et à comprendre. Pour une intéressante digression rechercher "référentiel de la transparence".
Sans l' mutable
mot-clé, vous finirez par être forcé d'utiliser const_cast
pour gérer les diverses utiles des cas particuliers, il permet la mise en cache, ref comptage, des données de débogage, etc.). Malheureusement, const_cast
est significativement plus destructeur qu' mutable
, parce qu'il oblige l'API client pour détruire l' const
protection des objets (s)qu'il utilise. En outre, il provoque généralisée const
destruction: const_cast
ing const pointeur ou d'une référence permet libre à écrire et l'appel de méthode d'accès visible des membres. En revanche mutable
nécessite l'API designer à exercer un contrôle de précision sur l' const
des exceptions, et généralement ces exceptions sont cachés dans const
méthodes d'exploitation sur les données privées.
(N. B. je me réfère à des données et de la méthode de la visibilité à quelques reprises. Je parle des membres marqués comme public vs privé ou protégé, ce qui est un type totalement différent de la protection des objets discutés ici.)