Новую редакцию классической книги Страуструпа я, конечно же, не мог обойти своим вниманием. Если уж автор языка C++ не сможет объяснить что там куда, зачем и как, то кто сможет? Ну, кроме Мейерса?
А Мейерс новую книгу по C++11 все никак не выпускает. Так что пришлось читать Страуструпа. Почему «пришлось»? Во-первых, я ее более раннее издание когда-то читал. А во-вторых, хоть чтение и пошло мне на пользу, но восторга как от моего любимого Мейерса я не испытал. Скучновато было. Как на мой вкус, слишком много дидактики и нравоучений для новичков — к которым, имхо, новички и не готовы еще.
По мере чтения книги я все время ловил себя на мысли, что не могу понять, для кого она написана. Ну, однозначно не для полных новичков в программировании, это и сам автор в предисловии говорит. Но я бы не советовал бы эту книгу и программистам (особенно не очень опытным программистам), которые раньше в глаза не видели C++, а тут вот решили приобщиться. Имхо, слишком сложно для них будет. Лучше начать с не столь сложной книги (Липпман подойдет), а Струструпом уже отполировать — и то лучше после незабвенного Мейерса. Книга не для новичков, не для начинающих, но и не для профи — имхо, для них многовато воды и объяснения азов дизайна.
Также я натыкался на невнятное и скомканное изложение некоторых тем. Чтобы понять, что имел в виду автор, мне понадобилось прилично погуглить. Например, о том, что такое POD (plain old data, чем оно было и чем оно стало), имхо, рассказано из рук вон плохо и бессвязно. Но такие места все же редкость.
И вообще я уже придираюсь. В целом книга однозначно хороша.
Главное достоинство книги — это полнота изложения. Больше нет книг, которые столь полно и последовательно излагают именно C++11. Да, я и до прочтения книги был в курсе, что такое static_assert
, зачем придумали rvalue, как работает цикл for(:)
и какая замечательная штука auto
. В конце концов, это и в википедии описано. Но чтобы претендовать на рабочее понимание предмета, этого мало — нужно набить шишки на нюансах. И этого добра в книге хватает. Например вот:
1 2 3 |
auto i{1}; |
Или вот:
1 2 3 4 |
char* p = "some string value"; p[0] = 'A'; |
С другой стороны, книга не стремится заменить собой стандарт и описать все, даже самые пыльные, закоулки языка. Например, в книге вы не найдете объяснения нюансов вот такого кода:
1 2 3 4 5 6 |
struct S { int field1; int field2; } a, b; |
Оно и правильно. Хотя, наверное, некоторые фичи C++03 временами уж слишком не упоминаются, а столкнуться с ними читателю придется… впрочем, учитывая, что в новом стандарте язык стал не проще, а сложнее — фич-то добавилось, а старых почти не убавилось — то, наверное, альтернатив нет. И так книга толстенная.
Как итог могу рекомендовать книгу к прочтению всем, кто хочет причесать свои познания в C++11. Я о потраченном времени не пожалел.