To pytanie jest inspirowane pytaniem o final
java .
Czy w C / C ++ powinienem używać, const
gdy tylko jest to możliwe?
Wiem, że istnieje już podobne pytanie dotyczące używania const
parametrów . Niestety to pytanie i jego odpowiedzi nie odpowiadają w pełni na moje pytanie, ponieważ dotyczą tylko parametrów funkcji, ale chciałbym również wiedzieć o innych przypadkach (np. Zmiennych lokalnych).
Ponadto prawie wszystkie odpowiedzi na to pytanie mówią, że powinniśmy skorzystać, const
ponieważ zawiera przydatne informacje na temat dostępności zmiennych. Wydaje się to jednak kolidować z odpowiedzią na temat używania wersji ostatecznej w Javie, która final
może być zbędna, jeśli nie zawiera dodatkowych informacji, dlatego należy ją pominąć, aby kod był krótki i czysty.
Czy powinienem używać, const
gdy tylko jest to możliwe? Jeśli tak, to dlaczego porady dla const
C ++ różnią się od porad dla final
Java?
źródło
final
iconst
nie masz takich samych gwarancji.Osobiście
const
zajmuje mi bardzo mało czasu na pisanie i bardzo mało czasu na czytanie, zwykle o wiele mniej niż zajmuje sprawdzenie, czy jakiś kod mutuje zmienną, i w rzeczywistości uniemożliwia mi pisanie błędów (czy ktoś kiedykolwiek przypadkowo zwiększył swój iterator końcowy? Itp)Uważam również, że ścisłe stosowanie const prowadzi mnie do lepszego kodu na inne sposoby, na przykład do tworzenia funkcji pomocniczych do wykonywania nietrywialnych inicjalizacji.
źródło
Nie zgadzam się z innymi plakatami i zalecam, abyś nie używał najwyższego poziomu
const
dla lokalnych zmiennych i parametrów. (Odwołania i wskaźniki do const, tj.const T&
Są różne, i powinieneś ich używać dla poprawności przez cały czas, gdy jest to właściwe).Zalety najwyższego poziomu
const
to:Wady to:
Nie można go stosować w przypadku zmiennych „pseudo-stałych”, tj. Zmiennych, które są inicjowane w jakiś sposób bardziej skomplikowane niż bezpośrednia konstrukcja, ale nie są modyfikowane po np. Użyciu
getline
:Zapobiega optymalizacji wyprowadzania przy wywołaniu funkcji i powrocie:
Pracowałem nad bazą kodu, w której
const
często używany był język lokalny , i okazało się, że w ogóle nie był pomocny, ale wypełnił kod subtelnymi pesymizacjami, jak powyżej. Ja osobiście wolę przyjąć ogólną politykę modyfikowania zmiennych tak rzadko, jak to możliwe, i uczynić funkcje wystarczająco małymi, aby użycie zmiennej było oczywiste, a nawet jeśli zostanie zmodyfikowana, złożoność funkcji jest wystarczająco niska, aby uczynić ją zmienną -kwestia.źródło
const
na lokalnych: ponieważ zapobiega modyfikacjom technicznym, a nie tylko koncepcyjnym.Słowa
const
kluczowego należy używać w przypadku zmiennych lokalnych, podobnie jak parametrów. Jest to przydatne, ponieważ:const
powinno zająć tylko sekundę, więc nie jest to wielka sprawa.Zauważ, że nie ma tutaj poprawnej / złej odpowiedzi. W twoim linku użytkownik, który miał najwięcej argumentów,
final
nie powinien być używany lokalnie. Jednak kolejny odpowiadający zdecydowanie go polecił.Jeśli twoja funkcja to prosta i trywialna , nie powinieneś dodawać,
const
ponieważ wszyscy rozumieją twój zamiar. Jeśli jednak logika w Twojej funkcji nie jest trywialna, powinieneś użyć słowa kluczowego. Pamiętaj, że niewiele jest do stracenia.źródło