Какой стандарт C++ следует изучать?

Я понимаю, что существует множество ответов на этот вопрос, но из-за сложной формулировки трудно прийти к четкому выводу. Я начал изучать C++ по стандарту 2011 года, используя учебник Стивена Прата. Со временем у меня возник вопрос о целесообразности изучения этого стандарта. 

Вопрос: Стоит ли переходить на изучение новых стандартов сразу, а затем возвращаться к более старым, если это необходимо? Или, учитывая, что в стандарте 2011 года не было кардинальных изменений, он по-прежнему является оптимальным для начального изучения, и не стоит беспокоиться об этом? 

Также, если не трудно, поделитесь своим мнением: является ли учебник Стивена Прата "Язык программирования С++ 6 издание" (2012 года) хорошим выбором для изучения?
  • 30 декабря 2024 г. 12:33
Ответы на вопрос 2
Изучение C++ – это сложный, но увлекательный процесс, и правильный выбор стандартов и учебников действительно может сыграть важную роль в вашем обучении.

### Какой стандарт C++ изучать

1. **C++11**: Стандарт C++11 стал важной вехой, так как он ввёл много новых возможностей, которые сделали язык более современным и удобным для использования. Если вы уже начали изучать его, вам не стоит откладывать изучение – многие концепции и конструкции, представленные в C++11, актуальны и по сей день.

2. **Современные стандарты (C++14, C++17, C++20)**: После C++11 последовали новые стандарты, каждый из которых добавлял новые функции и улучшения. Например, C++14 принес улучшения, такие как многократные шаблоны, а C++17 добавил такие вещи, как std::optional, std::variant и другие полезные конструкции. C++20 ещё больше расширил язык с такими функциями, как концепты и корутины.

3. **Рекомендация**: Рекомендуется изучить C++11, а затем постепенно переходить к C++14, C++17 и C++20. Это позволит вам иметь актуальные знания и навыки, которые востребованы в современной разработке. Если у вас есть возможность, не стоит возвращаться к стандартам, предшествующим C++11, так как они не содержат многих важных возможностей, которые улучшают практику программирования.

### Учебник Стивена Прата

1. **"Язык программирования C++" (6-е издание, 2012 год)**: Этот учебник считается классикой и стал базовым источником для многих программистов. Он охватывает основные концепции языка и даёт хорошую основу. Однако важно помнить, что на момент выхода этого издания некоторые темы и конструкции уже устарели, и в последующих стандартах было много улучшений.

2. **Рекомендация**: Учебник Стивена Прата хорош для понимания основ языка, но вы также должны быть готовы дополнительно изучать новые возможности, представленные в более поздних стандартах. Вы можете начать с этого учебника, а затем перейти на ресурсы, охватывающие более современные версии языка.

### Итог

- Начинайте с изучения C++11, затем постепенно осваивайте преимущества C++14, C++17 и C++20.
- Учебник Стивена Прата отлично подходит для начала, но важно также изучать дополнительные ресурсы, чтобы быть в курсе современных стандартов и возможностей языка.

Удачи в вашем обучении C++!
С. Прата подходит только для самого начала. 2012й год, стандарт C++11 вполне подходит чтобы начать. 
Дальше Прата рассматривать уже незачем. В стандарт нужно вникать самостоятельно, а не через книги.

Смысла сначала разбираться с последними стандартами особого нет. Код C++ пишется на разных стандартах даже в рамках одного проекта. Редко получается найти достаточно большой коллектив людей, которые один стандарт знают достаточно хорошо. Поэтому люди пишут каждый в своем стиле и со своим знанием.
И в таком коде надо уметь разбираться. Между стандартами много отличий как в синтаксисе, так и в поведении одного и того же кода. Это надо очень хорошо знать.

Для систематизации своих знаний очень важно понимать то, почему в следующем стандарте были сделаны именно такие изменения. Поэтому очень важно разбираться по порядку их выхода.
cfront, C++2.0 и C++98 сегодня иррелевантны. C++03 неактуален из-за изменений в C++11.
C++11 является самой базой понимания современного C++. С ним нужно разобраться буквально до самых мелочей.
C++14 является очень важным шагом вперед и его тоже нужно изучить. Важнее всего отличия поведения кода между C++11 и С++14.
C++17 является радикальным. Помимо прочего в нем оговорен отказ от обратной совместимости стандартов. В нем же сделано больше всего изменений, влияющих на поведение кода. Разница поведения кода до 17-го и после него под час радикальна.

C++20 сосредоточен на метапрограммировании и времени компиляции, но и других изменений в нем тоже хватает. Отличия от C++17 и более ранних весьма существенны. Но продуктового кода на нем сейчас крайне мало и его еще пару лет можно не брать во внимание.
C++23 и C++26 пока можно не брать, они даже на уровне трансляторов все еще плохо поддерживаются.

Из полезного стоит больше всего внимания уделить рабочей версии стандарта: eelis.net/c++draft
А для быстрого ориентирования очень полезна выжимка изменений в стандартах: https://github.com/AnthonyCalandra/modern-cpp-features

И самое главное. Не думай что у тебя получится все понять сразу. Люди на этот процесс кладут десятки лет своей рабочей жизни. Тебе их не перепрыгнуть. Но бежать впереди основной серой массы слабоквалифицированных кадров у тебя получится с успехом. И спустя твои десятки лет тебя тоже будут уважать за знания и навыки.
Похожие вопросы