Podobnie jak ten programista, nienawidzę auto
. A raczej nienawidzę tego, jak ludzie nadużywają auto
.
Jestem (mocną) opinią, że auto
pomaga ci pisać ogólny kod, a nie redukuje pisanie .
C ++ to język, którego celem jest umożliwienie pisania niezawodnego kodu, a nie minimalizacja czasu programowania.
Jest to dość oczywiste z wielu funkcji C ++, ale niestety kilka nowszych, takich jak auto
ten, ogranicza pisanie na klawiaturze, co prowadzi ludzi do myślenia, że powinni zacząć leniwie pisać.
W dawnych auto
czasach ludzie używali typedef
s, co było świetne, ponieważ typedef
pozwalało projektantowi biblioteki pomóc ci ustalić, jaki powinien być typ zwrotu, tak aby ich biblioteka działała zgodnie z oczekiwaniami. Kiedy używasz auto
, odbierasz tę kontrolę projektantowi klasy i zamiast tego prosisz kompilator o ustalenie , jaki powinien być typ, co usuwa jedno z najpotężniejszych narzędzi C ++ z zestawu narzędzi i grozi złamaniem ich kodu.
Generalnie, jeśli używasz auto
, powinno to być spowodowane tym, że twój kod działa dla każdego rozsądnego typu , a nie dlatego, że jesteś po prostu zbyt leniwy, aby zapisać typ, z którym powinien działać. Jeśli używasz go auto
jako narzędzia pomagającego lenistwu, to w końcu zaczniesz wprowadzać do programu subtelne błędy , zwykle spowodowane niejawnymi konwersjami, które nie miały miejsca, ponieważ użyłeś auto
.
Niestety, te błędy są trudne do zilustrowania w krótkim przykładzie tutaj, ponieważ ich zwięzłość czyni je mniej przekonującymi niż rzeczywiste przykłady, które pojawiają się w projekcie użytkownika - jednak łatwo pojawiają się w kodzie z dużą ilością szablonów, który wymaga pewnych niejawnych konwersji miejsce.
Jeśli chcesz mieć przykład, jest tutaj . Jednak mała uwaga: zanim skusisz się, by skoczyć i skrytykować kod: pamiętaj, że wiele znanych i dojrzałych bibliotek zostało opracowanych wokół takich niejawnych konwersji i są one tam, ponieważ rozwiązują problemy, które mogą być trudne, jeśli nie niemożliwe rozwiązać inaczej. Spróbuj znaleźć lepsze rozwiązanie, zanim je skrytykujesz.