Как научиться писать идиоматический код С++
Недавно я заставил себя изучить С++, и я только что закончил читать книгу С++: The Complete Reference, Герберт Шильдт. Мне понравилась книга и думаю, что я получил более или менее большую картину. Я заметил, что, когда я пытаюсь проверить с другими людьми то, что я использую, используя материал, который я узнал, они обычно считаются неидиоматическими и заменяются STL-способом сделать это, что безопаснее и проще (ну, t обложки библиотек STL и Boost).
Поэтому я хотел бы спросить: какие хорошие источники для изучения моделей хорошей программы на C++? Где я могу узнать основные шаблоны из "С++ way", чтобы делать что-то, а не просто повторять C-шаблоны на С++?
Меня особенно интересовали бы источники, которые включали STL и Boost.
Ответы
Ответ 1
Вы можете проверить Окончательное руководство и список книг на С++
Для ваших целей я бы особенно рекомендовал:
Они не в определенном порядке, также вы можете читать и кодировать что-то между ними.
(Примечание: Как отметил @John Dibling, книга Boost может быть немного устаревшей, у меня нет опыта с этим самим)
Ответ 2
Поскольку вы закончили книгу Герберта Шильдта, вы можете прочитать книгу Бьярне Страуструпа ( "Язык программирования на C++" ) или книгу Брюса Эккеля ( Мышление в С++ Часть 1 и Часть 2). Книга Eckel свободно доступна в Интернете, а Part-2 рассказывает о STL.
Ответ 3
Лучший способ узнать, как писать идиоматический код на С++, это... написать код на С++ и просмотреть ваш код некоторым продвинутым разработчиком С++.
Вы также должны прочитать некоторые из самых известных книг на С++ (Эффективный С++ от Scott Meyers - хороший старт, Modern С++ Design - плохая книга, чтобы научиться писать хороший код на С++, но это отличная книга, если вы хотите открыть и понять концепция общего программирования).
Вдобавок ко всему, вы должны прочитать много документов о STL и повысить и многому научиться об итераторах. Итераторы - это ключ к использованию STL (и ускорение реализации контейнеров и алгоритмов), и если вы не знаете, как их использовать, вы не будете писать идиоматический код С++. Когда-нибудь.
Ответ 4
Ускоренный С++ - это введение в С++, который использует STL с самого начала. Это не длинная книга, но она "плотная" и отличный выбор для кого-то в вашей ситуации ИМО. Мой опыт работы с С++ был похож на ваш, когда я его читал.
Ответ 5
Я бы (также) рекомендовал:
- Эффективный С++, Эффективный STL от Стив Майерс. Они легко усваиваются, но очень ценны - иногда даже освещаются.
- Code Complete (издание 1993 года доступно дешево и не так уж сильно отличается). Он длинный, но он просматривает все поле из того, что означает быть программистом, как должен выглядеть цикл for. (Было бы лучше, если бы оно было короче - то, как он покрывает столько земли, что его трудно разместить). Я держу это дорого, потому что он очень хорошо иллюстрирует два момента:
- код компромисс
- Известны факты (но нам по-прежнему удается обойтись),
- С++ FAQ Lite/Часто задаваемые вопросы по С++.
- Я бы бросил "Факты и ошибки" Роберта Гласса - он не подходит для вашего запроса очень хорошо, но прочитайте его.
Естественно, что вы недовольны кодом других людей. Это типично для программирования - черт возьми, даже мой собственный код пять лет назад был написан общим числом n00b. Это может быть более четко сформулировано для С++, поскольку оно предназначено для разных стилей и часто создает свободу ( "вы можете" ) над гильдиями ( "так" ).
Тем не менее, рассмотрим существующий код - ваш или другие - и рассмотрим, как его можно улучшить. Кроме того, выяснение, почему это так иногда помогает.
(Я помню несколько TheDailyWTF, где каждый мог бы услышать, насколько глупым и необоснованным это - все же где-то, похороненный среди меня тоже, был кто-то с опытом работы в домене, убедительно объясняющий, при каких обстоятельствах это было лучше, чем очевидное решение).