Koncepcja dokładności C++ jest IMO przereklamowana. To, co właśnie odkryłeś, jest jednym z największych ograniczeń: nie skaluje się według kompozycji. Aby móc utworzyć wektor const obiektów niestanowiących stałych, należy zaimplementować własny typ wektora. Zwróćmy uwagę, że nawet biblioteka standardowa musiała wprowadzić nowe typy dla const_iterators.
Moja sugestia polega na używaniu poprawności const, gdzie jesteś zmuszony i nie wszędzie, gdzie możesz. Teoretycznie poprawność poprawności powinna pomóc programistom, ale wiąże się z bardzo wysokimi kosztami ze względu na składnię i jest bardzo prymitywna (tylko jeden bit, nie skaluje się według składu, wymaga nawet duplikacji kodu).
Również z mojego doświadczenia wynika, że ta domniemana duża pomoc nie jest tak duża ... większość błędów, które łapie, jest związana z samą maszynerią poprawności, a nie z programową logiką.
Czy zastanawiałeś się kiedyś, dlaczego większość języków (w tym zaprojektowane po C++) nie wdrożyło tego pomysłu?
Cóż, co próbowaliście? –
Nie działa, myślisz? Wygląda na to, że powinien działać, czy próbowałeś go zmodyfikować? – yan
@yan: Nie, to nie powinno działać, ponieważ 'wektor :: operator [] const' i wszystkie inne elementy' const' zwracają element 'vector :: const_reference'. –
Josh