Słowo mutablekluczowe jest sposobem na przebicie constzasł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 constodniesieniem 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.
mutableWyją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 constmetody, 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 mutablenie niszczy constkoncepcji i jest używany tylko w użytecznych specjalnych przypadkach. Słowo mutablekluczowe pomaga, ponieważ wyraźnie oznacza członków danych, którzy podlegają tym szczególnym przypadkom.
W praktyce możesz używać constobsesyjnie w całej bazie kodu (zasadniczo chcesz „zainfekować” swoją bazę kodową const„chorobą”). W tym świecie wskaźniki i referencje są constz nielicznymi wyjątkami, dając kod łatwiejszy do zrozumienia i zrozumienia. W celu uzyskania interesującej dygresji wyszukaj „przejrzystość referencyjna”.
Bez mutablesłowa kluczowego będziesz w końcu zmuszony do const_castobsługi różnych przydatnych specjalnych przypadków, na które pozwala (buforowanie, liczenie odwołań, dane debugowania itp.). Niestety const_castjest znacznie bardziej destrukcyjny niż mutabledlatego, że zmusza klienta API do zniszczenia constochrony obiektów, których używa. Dodatkowo powoduje powszechne constzniszczenie: const_castwprowadzenie 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 mutablewymaga się od projektanta interfejsu API sprawowania drobiazgowej kontroli nad constwyjątkami i zwykle wyjątki te są ukryte w constmetodach 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 ).