Czy efektywny C ++ jest nadal skuteczny?

139

Z tego, co zobaczyłem w tym poście , postanowiłem zacząć czytać książkę Efektywne C ++ .

Ale teraz, gdy pojawiło się wiele nowych funkcji dzięki C ++ 11 i zmieniło się kilka dobrych praktyk, nie jestem pewien, czy jest to w rzeczywistości dobry pomysł. Czy pojawienie się C ++ 11 spowodowało, że jakiekolwiek porady zawarte w Effective C ++ zostały uznane za przestarzałe? Jeśli tak, jakich tematów należy unikać?

Niemiecki Capuano
źródło
4
Autor poczynił kilka komentarzy w artykule scottmeyers.blogspot.co.uk/2013/01/ ... i innych na stronie, w zasadzie tak, ale jest więcej do rozważenia.
jcoder
2
Wystarczy spojrzeć na spis treści: pearson.ch/1471/9780321334879/… . Wiele pozycji jest nadal aktualnych, niektóre można ulepszyć za pomocą odniesień do wartości r i innych nowych rzeczy, ale ogólnie powinno to być nadal skuteczne.
Zeta
To pytanie nie pasuje do SO. (1) Treść, o którą pytano, nie jest przedmiotem pytania, znajduje się ona w zasobie poza witryną (i nawet nie jest połączona). (2) Albo odniesienie się do każdej rekomendacji w książce jest oddzielną odpowiedzią, w takim przypadku jest to pytanie z listy, wymagające zbyt wielu odpowiedzi, albo jedna odpowiedź powinna omawiać całą książkę, w którym to przypadku pytanie to jest zbyt szerokie. To powiedziawszy, zadawanie identycznych pytań dotyczących jednej rekomendacji byłoby świetne.
Ben Voigt,
2
(1) Nawiązuję do książki, o której mowa w jednym z najpopularniejszych pytań w SO. (2) To w porządku skarga, ale prawie każde pytanie może być szerokie. lub możesz być tak wąski, jak chcesz. Myślę, że odpowiedzi były całkiem dobre i znacznie węższe niż większość pytań w SO, więc nie sądzę, aby szczegółowa lista była potrzebna. OFF TOPIC: zgadnij, kto ma pytanie zaczynające się od „Czy ktoś może pobić wydajność mojej liczby całkowitej do kodu std :: string, do którego link znajduje się poniżej?”
Niemiecki Capuano,

Odpowiedzi:

93

To, co sam Scott Meyers miał do powiedzenia na swoim blogu

Może to prowadzić do zastanowienia się, czy informacje i porady zawarte w tym wydaniu Effective C ++ sprzed C ++ 0x są nadal aktualne. Z przyjemnością informuję, że tak. W rzeczywistości jest to zaskakujące. Spędziwszy prawie dwa lata zanurzając się w szczegółach C ++ 0x, spodziewałem się, że lekko jęczę, przeglądając spis treści tej książki z myślą o C ++ 0x. Z pewnością niektóre elementy byłyby nieodpowiednie. Ale rady, które znalazłem, okazały się słuszne. Czy programiści C ++ 0x powinni preferować stałe, wyliczenia i inline do #defines(Pozycja 2)? Oni powinni. Czy powinny zapobiec pozostawianiu destruktorów przez wyjątki (punkt 8)? Na pewno. Czy powinni używać obiektów do zarządzania zasobami? Deklarować członków danych jako prywatne? Rozważ alternatywy dla funkcji wirtualnych? Kod niezależny od parametrów czynnika poza szablonami? (Pozycje 13, 22, 35 i 44). Tak, tak, tak, tak! Moim celem zawsze było podsumowanie porad zawartych w książce Effective C ++, a podsumowanie to pozostaje tak samo przydatne do programowania w C ++ 0x, jak i do „tradycyjnego” programowania w C ++. C ++ 0x to większy język i pod pewnymi względami inny, ale podstawowe techniki efektywnego wykorzystania „starego” C ++ są również kluczowe dla efektywnego wykorzystania C ++ 0x.

Nie oznacza to, że ten efektywny C ++ idealnie pasuje do C ++ 0x. W książce nie omówiono nowych funkcji C ++ 0x, więc brakuje elementów dotyczących efektywnego wykorzystania tych funkcji. Efektywny C ++ z 0xified C ++ z pewnością miałby elementy poświęcone operacjom przenoszenia, jednolitej inicjalizacji i wyrażeniom lambda, i prawdopodobnie zawierałby cały rozdział na temat efektywnego wykorzystania interfejsu API współbieżności. Taka książka zawierałaby również różne przykłady, np. Wykorzystujące zmienne automatyczne, pętle oparte na zakresach, domyślne inicjatory w klasie, a także okazjonalne szablony wariadyczne. W zakresie, w jakim ta książka nie obsługuje C ++ 0x, błędy polegają na przeoczeniu, a nie prowizji.

AKTUALIZACJA : nowy tytuł Effective Modern C ++ jest w sprzedaży od listopada 2014 roku od O'Reilly i Amazon (i wielu innych, które można znaleźć w Google).

TemplateRex
źródło
45

Tak, zdecydowanie warto przeczytać. Jest nowa książka, nad którą pracuje Scott: Efektywny C ++ 11 , który koncentruje się wyłącznie na kodzie C ++ 11. Efektywne C ++ jest nadal bardzo istotne i nie został zastąpiony przez nową książką. Kup, przeczytaj, ciesz się :)

cdmh
źródło
1
Widzę, że książki budują się na sobie, więc efektywny C ++ to podstawa. Jeśli czytasz tylko jedno z dwóch, powinno to być efektywne C ++. Efektywny nowoczesny C ++ jest znacznie bardziej ezoteryczny (i szczerze mówiąc, większość C ++ i tak jest daleka od „nowoczesnego”).
Andy Krouwel
21

Po pierwsze, książka jest oczywiście nadal ważna dla C ++ 03.

Po drugie, Meyers pisze lub napisał, w zależności od tego, kiedy czytasz to zdanie, Efektywny C ++ 11.

Po trzecie, mówiąc ogólnie, punkty tej książki będą nadal aktualne. C ++ nadal przedkłada szybkość nad bezpieczeństwo i wiele problemów w Efektywnym C ++ obraca się wokół tego.

Tylko rodzaj punktu spodziewałbym się nieważne są te, które mówią „Nie rób tego, to zrobić w zamian.” „Nie rób tego” będzie nadal aktualne. Ale C ++ rozwiąże pewne problemy. W szczególności wszelkie zalecenia dotyczące używania Boost są prawdopodobnie przestarzałe, ponieważ C ++ 11 zawiera wiele funkcji, dla których Meyers wyraźnie odsyła czytelnika do Boost.

djechlin
źródło
1
I oczywiście tr1, ponieważ uważam, że każdytr1 wspomniany przez niego element trafił do standardu C ++ 11.
Kyle Strand