Słowo mutable
kluczowe jest sposobem na przebicie const
zasłony, którą zasłaniasz swoje przedmioty. Jeśli masz stałe odniesienie lub wskaźnik do obiektu, nie możesz modyfikować tego obiektu w żaden sposób, z wyjątkiem tego, kiedy i jak jest oznaczony mutable
.
Z const
odniesieniem lub wskaźnik jesteś ograniczony do:
- dostęp tylko do odczytu dla widocznych członków danych
- uprawnienie do wywoływania tylko metod oznaczonych jako
const
.
mutable
Wyjątek sprawia, że tak można teraz pisać lub zestaw danych użytkowników, które są oznaczone mutable
. To jedyna widoczna z zewnątrz różnica.
Wewnętrznie te const
metody, które są widoczne, można również zapisywać do oznaczonych elementów danych mutable
. Zasadniczo konstelacja jest wszechstronnie przebita. Projektant interfejsu API musi całkowicie upewnić się, że mutable
nie niszczy const
koncepcji i jest używany tylko w użytecznych specjalnych przypadkach. Słowo mutable
kluczowe pomaga, ponieważ wyraźnie oznacza członków danych, którzy podlegają tym szczególnym przypadkom.
W praktyce możesz używać const
obsesyjnie w całej bazie kodu (zasadniczo chcesz „zainfekować” swoją bazę kodową const
„chorobą”). W tym świecie wskaźniki i referencje są const
z nielicznymi wyjątkami, dając kod łatwiejszy do zrozumienia i zrozumienia. W celu uzyskania interesującej dygresji wyszukaj „przejrzystość referencyjna”.
Bez mutable
słowa kluczowego będziesz w końcu zmuszony do const_cast
obsługi różnych przydatnych specjalnych przypadków, na które pozwala (buforowanie, liczenie odwołań, dane debugowania itp.). Niestety const_cast
jest znacznie bardziej destrukcyjny niż mutable
dlatego, że zmusza klienta API do zniszczenia const
ochrony obiektów, których używa. Dodatkowo powoduje powszechne const
zniszczenie: const_cast
wprowadzenie stałego wskaźnika lub odwołania umożliwia swobodny zapis i wywołanie metody dostępu do widocznych elementów. W przeciwieństwie do tego mutable
wymaga się od projektanta interfejsu API sprawowania drobiazgowej kontroli nad const
wyjątkami i zwykle wyjątki te są ukryte w const
metodach działających na danych prywatnych.
(NB I odnoszą się do danych i sposób widoczności kilka razy. Mówię o członków oznaczonych jako prywatny lub publiczny w porównaniu z chronionymi, który jest zupełnie inny rodzaj ochrony obiektu omawiane tutaj ).