Я хотел изучить C ++ некоторое время и взял AP Computer Programming в старшей школе (тогда, когда это был C ++, а не Java). Мне нравится C, и я просто не нашел времени для изучения C ++, или просто вернусь к C #, где я гораздо более продуктивен.
У меня такой вопрос: учитывая, что C ++ '11 был одобрен (хотя я знаю, что он не полностью реализован), это изменит способ, которым я должен подходить к изучению C ++? У меня есть C ++: полный справочник Херба Шильдта, составленный в 1998 году. Делает ли недавно утвержденный стандарт изучение таких книг менее важным, чем в некоторых новых учебниках / книгах, в которых есть что-то из стандарта? Есть ли польза от изучения старых книг?
Ответы:
Абсолютно. В эти дни три вещи, которые обычно есть в уроке 2, должны двигаться намного, намного позже:
Эти вещи, которые обычно есть в уроке 99, должны двигаться намного, намного раньше
Необработанный указатель Evey должен быть немедленно передан оболочке интеллектуального указателя (я бы начал с shared, а позже рассмотрим уникальный, так как он требует объяснения ссылок std :: move и rvalue). Это сделает изучение C ++ очень похожим на изучение Java или C #, где вы изучаете библиотеку одновременно с языком. Это также отнимет уйму памяти и не будет беспокоить людей.
Я также включил бы лямбду в картинку, когда мы впервые захотели перебрать коллекцию и сделать что-нибудь для каждого элемента.
Отказ от ответственности: я пишу курс C ++ для Pluralsight прямо сейчас и использую этот подход. Последний модуль - это «понимание кода других людей», и именно здесь я добавлю такие запутанные вещи, как строки char *, ручное управление памятью, арифметика указателей и так далее.
Обновление: несколько человек спросили, почему существование C ++ 0x вдохновляет на обучение тем вещам, которые можно было бы преподавать на C ++ 03. Я думаю, что это ряд вещей:
>>
правильно устраняет ошибку, которая была бы при объявлении некоторых шаблонов шаблонов.На мой взгляд, есть вещи, которые мы могли бы изменить в том, как мы преподавали C ++ некоторое время назад, но некоторые из нас сдерживались, потому что нам все еще нужен был способ старой школы для отступления или потому, что обучение этому просто требовало много тайных знаний.
источник
std::for_each()
будет гораздо более популярной, чем раньше,auto
будет очень важна, и новый синтаксис объявления функции (вместе сdecltype
) станет довольно часто использоваться в коде шаблона. Это то, чему не учит нынешняя книга по С ++. Но да, в целом я согласен с вами (+1
). Когда я начал читать курсы C ++, я начал с Accelerated C ++ , и хотя мой курс начал все больше отклоняться от него, он все еще остается верным основному принципу.Да, довольно. Простой факт заключается в том, что в C ++ 98 и 03 многие хорошие практики были принципиально непригодны из-за низкого качества языковой поддержки, например, для функционального программирования. Теперь, когда лямбды существуют и работают, люди, как правило, воспринимают функциональные интерфейсы намного лучше, чем раньше, а общее программирование еще сильнее, чем раньше.
В 1998 году люди только начинали понимать, как писать высококачественный, безопасный и быстрый код с использованием C ++, и большая часть кода была «C was Classes». В C ++ 11 все очень по-другому - идиомы, такие как копирование и замена, и правило трех (теперь пять) хорошо известны и определены, и гораздо больше типов управления ресурсами стали стандартными, как
shared_ptr
и вunique_ptr
тех случаях, когда предыдущие стандарты просто оставили их как зияющие дыры.Вы можете просмотреть этот вопрос для превосходного списка справочного материала на C ++.
источник
+1
от меня.Я не знаю конкретную книгу, которую вы упоминаете. Но в целом можно сказать, что все основы синтаксиса C ++, типов данных и ООП все еще верны. То же самое относится и к библиотекам STL, которые упоминаются в большинстве книг для начинающих.
Хотя в книге, изданной в 1998 году, возможно, пропустили несколько обновлений и разработок в стиле программирования C ++, которые накопились в сообществе за эти годы. Я бы искал чуть больше актуальных ресурсов. Существует более чем достаточно бесплатных онлайн-учебников и документов, которые должны дать вам хорошее начало. Некоторые из них могут даже упомянуть C ++ 0x.
C ++ 0x наверняка многое изменит в том, как программисты видят и используют язык в будущем. Но это повлияет на более сложные проекты, в которых новые функции начинают обретать смысл. Для новичка это не должно иметь значения, и вы можете сосредоточиться на освоении существующих концепций, этого уже достаточно для изучения. Например, большинство книг для начинающих не слишком углубляются в шаблоны, поэтому новые вариационные шаблоны - это не то, что вам нужно знать сейчас.
Может быть, посмотрите на список изменений . По крайней мере, несколько понятий, таких как диапазон на основе циклов , скорее всего, появятся в новых уроках даже для начинающих. Так что стоит посмотреть.
источник
cprogramming.com
.Конечно, в отношении чего-либо, связанного с технологией, быть в курсе последних событий - это всегда разумный шаг, однако изменения, внесенные в C ++ 11, призваны не раскачивать лодку. Если вы новичок в C ++ (или программировании в целом), я не буду беспокоиться об этом.
Кроме того, если вы профессиональный программист, можете поспорить, что в будущем вы будете работать над чужим кодом, поэтому всегда полезно понимать, как все работает, даже если на практике это не рекомендуется.
источник
auto
и асинхронное выполнение функций могут делать что-то кроме «раскачивания»?