Files
cppfaq/README.md
2025-05-26 01:20:57 +08:00

216 lines
16 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# C++ FAQ
В этом репозитории собрана основная информация с часто
задаваемыми вопросами и полезными источниками.
```TODO``` (Если вы нашли что-то интересное из мира С++, обнаружили, что какая-то информация устарела - [оповестите нас](https://github.com/JoshuaJakowlew/cppfaq/issues)!)
---
### :pushpin: Справочная информация
##### Стандарт языка и документация
* [Документация по С++ (cppreference)](https://en.cppreference.com/w)
* [Документация по С++ от Microsoft (MSDN)](https://docs.microsoft.com/en-us/cpp/cpp/cpp-language-reference?view=msvc-170)
* [Последний драфт стандарта (Working Draft)](http://eel.is/c++draft/)
##### Список выпущенных стандартов языка и изменения которые они привнесли
- Нововведения С++11 [📄Текст](https://en.cppreference.com/w/cpp/11) [📺Видео](https://www.youtube.com/watch?v=ZOmZCj5ijck&ab_channel=PVS-StudioRu)
- Нововведения С++14 [📄Текст](https://en.cppreference.com/w/cpp/14) [📺Видео](https://www.youtube.com/watch?v=5TTS9zr9PGk&ab_channel=PVS-StudioRu)
- Нововведения С++17 [📄Текст](https://en.cppreference.com/w/cpp/17) [📺Видео](https://www.youtube.com/watch?v=rRMgJEZVY04&ab_channel=PVS-StudioRu)
- Нововведения С++20 [📄Текст](https://en.cppreference.com/w/cpp/20) [📺Видео](https://www.youtube.com/watch?v=KPuYn_fUdxc&t=3s&ab_channel=PVS-StudioRu)
- Нововведения С++23 [📄Текст](https://en.cppreference.com/w/cpp/23) [📺Видео](https://www.youtube.com/watch?v=mQzijnbnTO4&t=968s)
- [Список нововведений С++11-23 с примерами](https://github.com/AnthonyCalandra/modern-cpp-features)
### :pushpin: Онлайн-сервисы
##### Основные сервисы с помощью которых можно собрать, запустить, протестировать, разместить ваш программный код
- Сервисы для сборки и запуска кода:
* :heavy_plus_sign: [GodBolt - Сборник компиляторов/дизассемблеров](https://godbolt.org)
- позволяет запускать код через множество разных компиляторов GCC, Clang, MSVC ...
- показывает хорошо аннотированный вывод сборки
- множество компиляторов с множеством разных версий, в том числе с экспериментальными функциями
- поддерживает несколько популярных библиотек (ranges, {fmt}, …)
- отличный текстовый редактор с несколькими курсорами, режим VIM, темный режим, …
- возможен обмен кода между Compiler Explorer, C++ Insights и Quick Bench
* [Onlinegdb - Онлайн компилятор и отладчик](https://www.onlinegdb.com/)
- С++03 - C++20
- GDB отладчик
* [Wandbox - Сборник компиляторов](https://wandbox.org/)
- GCC, Clang, C++03 - C++2a, Boost
* [CPP.SH - Сборник компиляторов](https://cpp.sh/)
- Clang, C++03 - C++23 (experimental)
- Как оно работает
* [Взгляните на свой исходный код глазами компилятора (C++ Insights)](https://cppinsights.io)
- Сервисы для профилирования кода:
* :heavy_plus_sign: [Perfbench](https://perfbench.com/)
* [Quick-Bench](https://quick-bench.com/)
- Сервисы для размещение кода:
* :heavy_plus_sign: [GitHub Gist](https://gist.github.com)
* [Pastebin](https://pastebin.com)
### :pushpin: Сообщество
##### Основные форумы и Q&A площадки
- :heavy_plus_sign: [StackOverflow](https://stackoverflow.com/)
- [StackOverflow (Русская ветка)](https://ru.stackoverflow.com/)
- [CyberForum](https://www.cyberforum.ru/)
##### Основные сообщества в различных социальных сетях, где можно поучаствовать в обсуждении вопросов и решение проблем
- Telegram каналы
* [pro.cxx (Для людей с опытом)](https://t.me/ProCxx)
* [supapro.cxx (Чат для тех, кто немного знает C++)](https://t.me/supapro)
* [pro.buildsystems (Чат про системы сборки)](https://t.me/probuildsystems)
* [Qt](https://t.me/qt_chat)
- Беседы в vk.com
* [Nemezida C++](https://vk.me/join/7tQtOXRZLIPkOh46aN5nN4WNEir47wHYtBE=)
* [Nemezida Flood](https://vk.me/join/r2GYEBn3TqU9UI5hXBq917IrDXCTOTpT5mU=)
- Локальные C++ User Groups
* [C++ Moscow](https://t.me/cppmoscow_info) — Московское сообщество программистов на C++.
```TODO``` (Если вы знаете еще какие-то интересные сообщества, [оповестите нас](https://github.com/JoshuaJakowlew/cppfaq/issues)!)
### :pushpin: Учебные материалы
##### Книги на которые стоит обратить свое внимание (разделены на 3 уровня сложности)
* :green_book: Начальный
- :heavy_plus_sign: Стенли Б. Липпман - Язык программирования C++. Базовый курс. [[Скачать книгу](https://disk.yandex.ru/i/O_9ghFjZMr8bBA)]
- Стивен Прата - Язык программирования C++. Лекции и упражнения [[Скачать книгу](https://disk.yandex.ru/i/QSR598p9CpG5tA)]
- Бьёрн Страуструп - Принципы и практика с использованием C++ [[Скачать книгу](https://disk.yandex.ru/i/1EJ6hlr7g_glhw)]
* :blue_book: Средний
- Скотт Мейерс - Эффективный и современный С++. 42 совета по использованию C++11 и C++14 [[Скачать книгу](https://disk.yandex.ru/i/BKzDWpscRPl_lQ)]
- Яцек Галовиц - C++17 STL. Стандартная библиотека шаблонов [[Скачать книгу](https://disk.yandex.ru/i/UcSk25yhTVBNVg)]
* :orange_book: Выше среднего
- Ivor Horton Peter Van Weert "Beginning C++20 - From Novice to Professional" (6th edition)
- Nicolai M. Josuttis "С++17 The Complete Guide"
- Marc Gregorie "Professional C++" (4th edition)
- Vardan Grigoryan, Shunguang Wu "Expert C++ - Become a proficient programmer by learning coding best practices with C++17 and C++20's latest features"
- David Vandevoorde, Nicolai M. Josuttis, Douglas Gregor "C++ Templates - The Complete Guide" (2nd edition)
- Antony Polukhin, Boost C++ Application Development Cookbook
- Bjorn Andrist, Viktor Sehr, C++ High Performance: Master the art of optimizing the functioning of your C++ code (2nd Edition)
- Rainer Grimm, C++20: Get the Details
- Paul Deitel, Harvey Deitel, C++20 for Programmers: An Objects-Natural Approach
##### Онлайн-ресурсы
- [CppCoreGuidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines) - список рекомендаций "как надо" от разработчиков языка.
- [Johnnys Software Lab](https://johnnysswlab.com/) - неплохие гайды по оптимизации структур данных.
##### Онлайн-курсы
- Для ознакомления с языком, если у вас вообще нет опыта.
* [Learn C++](https://learncpp.com/) - сайт с учебными материалами для новичков
* [Введение в программирование C++ ](https://stepik.org/course/363/promo)
* [Программирование на языке C++ ](https://stepik.org/course/7/promo)
* [Изучение синтаксиса С++ с примерами](https://www.programiz.com/cpp-programming)
* [ [OTUS] "С++ для начинающих разработчиков 2020"](https://disk.yandex.ru/d/kcsmDi1uDcKdcw?w=1)
- Для тех, кто имеет уже базовые знания в языке.
* [ [Яндекс Практикум] "Разработчик C++"](https://practicum.yandex.ru/profile/cpp/)
* [ [Яндекс Практикум] "Курс «Мидл C++ разработчик»"](https://practicum.yandex.ru/promo/courses/middle-cpp-ts/)
* [ [Бывшая Coursera] "Основы разработки на C++"](https://cppcourse.ru/)
* [ [OTUS] "Разработчик C++ 2020"](https://disk.yandex.ru/d/01KzEC-oIrpUqA?w=1)
* [ [Повторение материала] ](https://thispointer.com/c11-tutorial/)
##### Лекционный материал
- Константина Владимирова (LLVM Compiler Devloper)
* [Великолепные лекции по С++](https://www.youtube.com/channel/UCvmBEbr9NZt7UEh9doI7n_A/featured)
* [C++ базовый курс, MIPT, ILab](https://www.youtube.com/watch?v=Bym7UMqpVEY&list=PL3BR09unfgciJ1_K_E914nohpiOiHnpsK)
- Лекторий ФПМИ
* [Введение в С++ (1 курс, осень 2020) ЧАСТЬ №1](https://www.youtube.com/playlist?list=PL4_hYwCyhAvazfCDGyS0wx_hvBmnAAf4h)
* [Введение в С++ (1 курс, весна 2021) ЧАСТЬ №2](https://www.youtube.com/playlist?list=PL4_hYwCyhAvYTzwME4vQoDO8ZINM5trra)
* [Введение в С++ (1 курс, осень-весна 2021-2022)](https://www.youtube.com/playlist?list=PLSaMkqCXRp4Jen1F8YHJpxlj64hJhdoCS)
- Computer Science Center
* [Программирование на C++, часть 1 (осень 2018)](https://www.youtube.com/playlist?list=PLlb7e2G7aSpTFea2FYxp7mFfbZW-xavhL)
* [Программирование на C++, часть 2 (весна 2019)](https://www.youtube.com/playlist?list=PLlb7e2G7aSpRs7YafQ1GgJvyRku10m1RN)
##### Ресурсы с задачами для практики и тренировок
* [Hackerrank](https://www.hackerrank.com/domains/cpp)
* [CodeForces](https://codeforces.com/)
* [Codewars](https://codewars.com/kata/search/cpp?q=&&beta)
* [LeetCode](https://leetcode.com/)
* [CppQuiz](https://cppquiz.org)
##### Материалы для изучения алгоритмов и структур данных
- [Алгоритмы - Теория и Реализация](https://ru.algorithmica.org/cs/graph-traversals/cycle/)
- [Лекции Павла Маврина](https://www.youtube.com/c/pavelmavrin)
- [Реализациями большого количества алгоритмов на разных языках программирования](https://the-algorithms.com)
- [Algorithms for Modern Hardware (книга по оптимизациям под современное железо)](https://en.algorithmica.org/hpc/)
- [Тренировки по алгоритмам [Яндекс]](https://yandex.ru/yaintern/algorithm-training)
* Тренировки по алгоритмам от Яндекса [Плейлист](https://www.youtube.com/watch?v=QLhqYNsPIVo&list=PL6Wui14DvQPySdPv5NUqV3i8sDbHkCKC5)
- [ [OTUS] Алгоритмы для разработчиков 2020](https://disk.yandex.ru/d/JYgqgDt9-7_EXg?w=1)
- [ [Яндекс.Практикум] Алгоритмы для разработчиков 2020](https://yadi.sk/d/igBICEE1ST6NNg)
- [Книги для изучения алгоритмов](https://yadi.sk/d/dQkuPvG9E0nlqQ)
- [Реализации алгоритмов на C++](https://github.com/TheAlgorithms/C-Plus-Plus)
- Визуальное представление алгоритмов:
* [VisualGo](https://visualgo.net/en)
* [Algorithm Visualizer](https://algorithm-visualizer.org)
- [Algorithms Specialization от Стэндфордского университета (Coursera)](https://www.coursera.org/browse/computer-science/algorithms)
- [ФПМИ Алгоритмы и структуры данных](https://www.youtube.com/playlist?list=PL4_hYwCyhAvasUkSNdsUKoqcWpw9xl3i1)
- [Алгортимы Ч.1 от Принстонского университета ( Coursera ) ](https://ru.coursera.org/learn/algorithms-part1?action=enroll#syllabus)
- [Алгортимы Ч.2 от Принстонского университета ( Coursera ) ](https://ru.coursera.org/learn/algorithms-part2)
##### Интересные (и местами случайные) конференции, статьи и выступления в мире С++
- [Каталог конференций](https://github.com/PatriotRossii/cpp-conferences)
- Статьи
* [Отличные статьи по С++](http://scrutator.me/)
* [User-defined литералы и магия на интринсиках (разные статьи)](https://wunkolo.github.io/)
* [Настоящая производительность виртуальных функций](https://johnysswlab.com/the-true-price-of-virtual-functions-in-c/)
- Выступления
* [ [CppCon 2021] Branchless Programming in C++ - Fedor Pikus](https://www.youtube.com/watch?v=g-WPhYREFjk)
* [ [CppCon 2021] Beyond struct: Meta-programming a struct Replacement in C++20 - John Bandela](https://www.youtube.com/watch?v=FXfrojjIo80)
* [ [CppCon 2019] Non-conforming C++: the Secrets the Committee Is Hiding From You - Miro Knejp](https://www.youtube.com/watch?v=IAdLwUXRUvg)
- Сборник полезных материалов (Сюда стоит посмотреть)
* [Jason Turner (C++ Weekly)](https://www.youtube.com/user/lefticus1)
* [Путеводитель C++ программиста по неопределенному поведению](https://github.com/Nekrolm/ubbook)
* [Визуальные шпаргалки по разным темам языка C++](https://hackingcpp.com/)
* [Сборник разных гайдов/примеров по cmake](https://github.com/onqtam/awesome-cmake)
* [Modern C++ and Native Code (converting from bfilipek.com)](https://www.cppstories.com/)
* [CppNuts](https://www.youtube.com/user/MrRupeshyadav)
* [CppStories](https://www.cppstories.com/p/start-here/)
* [CppCon](https://www.youtube.com/channel/UCMlGfpWw-RUdWX_JbLCukXg)
* [Bisqwit](https://www.youtube.com/channel/UCKTehwyGCKF-b2wo0RKwrcg)
* [Programming and Technology Tutorials(javidx9)](https://www.youtube.com/c/javidx9/videos)
* [Molly Rocket(Handmade Hero)](https://www.youtube.com/c/MollyRocket/videos)
### :pushpin: Системы сборки
##### Материалы по Cmake
- Основные ссылки
* [Официальный сайт системы автоматизации сборки программного обеспечения Cmake](https://cmake.org/)
* [Документация](https://cmake.org/documentation/)
-атьи
* [Полное руководство по CMake. Часть первая: Синтаксис](https://web.archive.org/web/20220528140418/https://habr.com/en/post/431428)
* [Полное руководство по CMake. Часть вторая: Система сборки](https://web.archive.org/web/20220528140444/https://habr.com/en/post/432096)
* [Полное руководство по CMake. Часть третья: Тестирование и пакетирование](https://web.archive.org/web/20220528140513/https://habr.com/en/post/433822)
- Лекции/Видео/Tutorials
* [Сборка проектов на C++ с использованием CMake [OTUS]](https://www.youtube.com/watch?v=LZwEtbc9gEA)
* [CMake с нуля [SimpleCODING!] :)](https://www.youtube.com/playlist?list=PL6x9Hnsyqn2UwWjSvjCzAY6sEOBrHY7VH)
- Книги/Справочники
* [Open Source Книга от разработчиков CMake "Mastering CMake"](https://cmake.org/cmake/help/book/mastering-cmake/)
* [Программирование: система построения проектов cmake [Дубров Д.В.]](https://disk.yandex.ru/i/IvnzEcNJseJbMw)
* [CMake Cookbook](https://disk.yandex.ru/i/jwBzh2_JcIViTw)