Описание тега c++-faq
Вопросы с тегом C++-faq предназначены для ответов на вопросы, которые часто задаются в теге C++ в stackru. (См. Это обсуждение на Meta.)
Его основная цель - служить отправной точкой при попытке найти конкретный, часто задаваемый вопрос, с помощью которого можно закрыть дубликат. Конечно, его также можно использовать для указания хороших ответов на вопросы, возникающие при обсуждении связанных тем (в комментариях) или для поиска перед публикацией.
Для достижения основной цели вопросы должны быть помечены тегом C++-faq when
- они задают вопрос, который задавали в stackru несколько раз (в качестве альтернативы, они могут дать ответ, на который указали несколько раз, но не спросили об этом)
- это недвусмысленные, хорошо сформулированные вопросы, на которые можно ответить, не вызывая больших споров
- либо был дан очень хороший ответ на этот вопрос, за него проголосовали и, в идеале, он был принят, либо вопросы составлены таким образом, что они собирают соответствующую информацию внутри вопроса (как это делает знаменитый вопрос из книги C++) †
Другие внешние ресурсы
- Справочник по C++
- Документы комитета ISO по стандартам C++
- Сайт Standard C++ Foundation
- Гуру недели
- Другие идиомы C++
- Что должен знать каждый компьютерный ученый об арифметике с плавающей точкой
† "Знаменитый" вопрос из книги по C++ " Окончательное руководство и список книг по C++:
Новичок
Вводный, без опыта программирования
C++ Primer * (Stanley Lippman, Josée Lajoie и Barbara E. Moo) ( обновлено для C++11) Находясь на 1 тыс. Страниц, это очень подробное введение в C++, которое охватывает практически все на языке в очень доступном формате. и очень подробно. Пятое издание (выпущено 16 августа 2012 г.) охватывает C++11. [Обзор]
Программирование: принципы и практика с использованием C++ (Бьярн Страуструп, 2-е издание - 25 мая 2014 г.) ( обновлено для C++11 / C++14) Введение в программирование с использованием C++ от создателя языка. Хорошее чтение, не предполагающее предыдущего опыта программирования, но не только для новичков.
* Не путать с C++ Primer Plus (Stephen Prata), обзор которого значительно менее благоприятен.
Вводный, с предыдущим опытом программирования
Обзор C++ (Bjarne Stroustrup) ( 2-е издание для C++17) "Тур" представляет собой краткий (около 180 страниц и 14 глав) учебный обзор всего стандартного C++ (язык и стандартная библиотека, а также использование C++11) на умеренно высоком уровне для людей, уже знающих C++ или хотя бы опытных программистов. Эта книга представляет собой расширенную версию материала, составляющего главы 2–5 4-го издания "Язык программирования C++".
Accelerated C++ (Эндрю Кениг и Барбара Му, 1-е издание - 24 августа 2000 г.). В основном он охватывает те же области, что и C++ Primer, но делает это на четвертой части. Во многом это связано с тем, что это не попытка быть введением в программирование, а введение в C++ для людей, которые ранее программировали на каком-то другом языке. У него более крутая кривая обучения, но для тех, кто может с этим справиться, это очень компактное введение в язык. (Исторически сложилось так, что она открыла новые горизонты, став первой книгой для начинающих, в которой использовался современный подход к обучению языку.) Несмотря на это, C++, который она преподает, является чисто C++98. [Обзор]
Лучшие практики
Эффективный C++ (Скотт Мейерс, 3-е издание - 22 мая 2005 г.) Эта книга была написана с целью стать лучшей второй книгой, которую следует прочитать программистам на C++, и ей это удалось. Ранние выпуски были нацелены на программистов, пришедших из C, третье издание меняет это и нацелено на программистов, пришедших с таких языков, как Java. Он представляет около 50 легко запоминающихся практических правил вместе с их обоснованием в очень доступном (и приятном) стиле. Для C++11 и C++14 примеры и некоторые проблемы устарели, и следует предпочесть эффективный современный C++. [Обзор]
Effective Modern C++ (Скотт Мейерс) Это новая версия Effective C++, предназначенная для программистов на C++, переходящих с C++03 на C++11 и C++14.
- Эффективный STL (Скотт Мейерс). Его цель - сделать то же самое с частью стандартной библиотеки, исходящей из STL, что и Эффективный C++ с языком в целом: он представляет практические правила вместе с их обоснованием. [Обзор]
Средний
Более эффективный C++ (Скотт Мейерс) Еще больше практических правил, чем эффективный C++. Не так важно, как в первой книге, но все же полезно знать.
Exceptional C++ (Herb Sutter) Представленный в виде набора головоломок, в нем есть одно из лучших и подробных обсуждений надлежащего управления ресурсами и безопасности исключений в C++ посредством Resource Acquisition is Initialization (RAII) в дополнение к подробному описанию различных по другим темам, включая идиому pimpl, поиск имени, хороший дизайн классов и модель памяти C++. [Обзор]
Подробнее Exceptional C++ (Herb Sutter) Охватывает дополнительные темы безопасности исключений, не охваченные в Exceptional C++, помимо обсуждения эффективного объектно-ориентированного программирования на C++ и правильного использования STL. [Обзор]
Исключительный стиль C++ (Херб Саттер) Обсуждает универсальное программирование, оптимизацию и управление ресурсами; в этой книге также есть отличное описание того, как писать модульный код на C++, используя функции, не являющиеся членами, и принцип единой ответственности. [Обзор]
Стандарты кодирования C++ (Херб Саттер и Андрей Александреску) "Стандарты кодирования" здесь не означают "сколько пробелов я должен делать отступы в моем коде?" В этой книге содержится 101 передовой опыт, идиомы и распространенные ошибки, которые могут помочь вам написать правильный, понятный и эффективный код на C++. [Обзор]
C++ Templates: The Complete Guide (David Vandevoorde и Nicolai M. Josuttis) Этокнига о шаблонахкак они существовали до C++11. Он охватывает все, от самых основ до некоторых наиболее сложных метапрограммирований шаблонов, и объясняет каждую деталь того, как работают шаблоны (как концептуально, так и как они реализуются), а также обсуждает множество распространенных ошибок. В приложениях содержится отличное резюме правила единого определения (ODR) и разрешения перегрузки. Второе издание охватывает C++11, C++14 и C++17 уже опубликовано. [Обзор]
Продвинутый
Современный дизайн C++ (Андрей Александреску) Революционная книга по передовым методам общего программирования. Представляет дизайн на основе политик, списки типов и основные общие идиомы программирования, а затем объясняет, сколько полезных шаблонов проектирования (включая распределители небольших объектов, функторы, фабрики, посетителей и мульти-методы) можно реализовать эффективно, модульно и чисто с использованием универсального программирования.. [Обзор]
Метапрограммирование шаблонов C++ (Дэвид Абрахамс и Алексей Гуртовой)
C++ Concurrency In Action (Энтони Уильямс) Книга, посвященная поддержке параллелизма C++11, включая библиотеку потоков, библиотеку Atomics, модель памяти C++, блокировки и мьютексы, а также вопросы проектирования и отладки многопоточных приложений.
Расширенное метапрограммирование на C++ (Давиде Ди Дженнаро) Руководство по методам TMP до C++11, ориентированное больше на практику, чем на теорию. В этой книге есть масса отрывков, некоторые из которых устарели из-за особенностей типа, но методы, тем не менее, полезно знать. Если вы можете смириться с причудливым форматированием / редактированием, его легче читать, чем Александреску, и, возможно, он более полезен. Для более опытных разработчиков есть большая вероятность, что вы поймете что-то в темном углу C++ (причуда), что обычно возникает только благодаря большому опыту.
Эталонный стиль - все уровни
Язык программирования C++ (Bjarne Stroustrup) ( обновлен для C++11) Классическое введение в C++ его создателем. Написанный параллельно с классическим K&R, он действительно очень похож на него и охватывает практически все, от базового языка до стандартной библиотеки, парадигм программирования и философии языка. [Обзор] Примечание. Все выпуски стандарта C++ отслеживаются в этом вопросе: Где мне найти текущий стандарт C++.
C++ Стандартная библиотека Учебник и справочник (Nicolai Josuttis) ( обновлено для C++11)введение и ссылки для стандартной библиотеки C++. Второе издание (выпущенное 9 апреля 2012 г.) охватывает C++11. [Обзор]
Потоки и локали ввода-вывода C++ (Анжелика Лангер и Клаус Крефт) Об этой книге можно сказать очень мало, за исключением того, что если вы хотите что-либо узнать о потоках и локали, то это единственное место, где можно найти окончательные ответы. [Обзор]
C++11/14/17/… Ссылки:
C++ 11 / 14 / 17 Стандарт (INCITS/ISO/IEC 14882:2011/2014/2017) Это, конечно, является окончательным арбитром всего того, что является или не является С ++. Однако имейте в виду, что он предназначен исключительно для справки для опытных пользователей, желающих посвятить значительное время и усилия его пониманию. Стандарт C++17 выпущен в электронной форме за 198 швейцарских франков.
Стандарт C++17 доступен, но, по-видимому, не в экономичной форме - напрямую от ISO он стоит 198 швейцарских франков (около 200 долларов США). Для большинства людей окончательный вариант до стандартизации более чем достаточен (и бесплатный). Многие предпочтут еще более новый черновик, в котором задокументированы новые функции, которые, вероятно, будут включены в C++20.
Обзор нового C++ (C++11/14) (только PDF) (Scott Meyers) ( обновлено для C++1y / C++14) Это презентационные материалы (слайды и некоторые лекции) трех- дневной учебный курс, предлагаемый Скоттом Мейерсом, очень уважаемым автором по C++. Несмотря на то, что перечень наименований короткий, качество высокое.
В Основные принципы C++ (C++11/14/17/...) (под редакцией Бьярне Страуструп и Herb Sutter) является развивающейся онлайн документ, состоящий из набора руководящих принципов с использованием современных C++ хорошо. Рекомендации сосредоточены на вопросах относительно более высокого уровня, таких как интерфейсы, управление ресурсами, управление памятью и параллелизм, влияющие на архитектуру приложения и дизайн библиотеки. Проект был объявлен на CppCon'15 Бьярном Страуструпом и другими и приветствует вклад сообщества. Большинство руководств дополнено обоснованием и примерами, а также обсуждениями возможной поддержки инструментов. Многие правила разработаны специально для автоматической проверки инструментами статического анализа.
C++ Super-FAQ (Marshall Cline, Бьярне Страуструп и другие) является попыткой Стандартной Foundation C++ унифицировать C++ часто задаваемые вопросы ранее поддерживали индивидуально Marshall Cline и Бьярне Страуструп, а также включение новых взносов. Задания в основном касаются вопросов среднего уровня и часто написаны в юмористическом тоне. Не все элементы могут быть полностью обновлены до последней версии стандарта C++.
cppreference.com (C++03/11/14/17/…) (инициированный Нейтом Колом) - это вики-сайт, в котором обобщены основные функции базового языка и имеется обширная документация по стандартной библиотеке C++. Документация очень точная, но ее легче читать, чем официальный стандартный документ, и она обеспечивает лучшую навигацию благодаря своей вики-природе. В проекте задокументированы все версии стандарта C++, а сайт позволяет фильтровать отображение для конкретной версии. Проект был представлен Нейтом Колем на CppCon'14.
Классика / Раньше
Примечание. Некоторая информация, содержащаяся в этих книгах, может быть устаревшей или больше не считаться оптимальной.
Дизайн и эволюция C++ (Бьярн Страуструп) Если вы хотите узнать, почему язык такой, какой он есть, эта книга - то место, где вы найдете ответы. Это охватывает все, что было до стандартизации C++.
Размышления о C++ - (Эндрю Кениг и Барбара Му) [Обзор]
Расширенные стили и идиомы программирования C++ (Джеймс Коплиен) Предшественник движения шаблонов, он описывает множество специфичных для C++ "идиом". Это, безусловно, очень хорошая книга, и, возможно, ее стоит прочитать, если вы сэкономите время, но она довольно старая и не актуальна для текущего C++.
Разработка крупномасштабного программного обеспечения на C++ (Джон Лакос) Лакос объясняет методы управления очень большими проектами программного обеспечения на C++. Конечно, хорошее чтение, если только оно было актуальным. Он был написан задолго до C++98 и упускает многие функции (например, пространства имен), важные для крупномасштабных проектов. Если вам нужно поработать в большом программном проекте на C++, вы можете прочитать его, хотя вам нужно не только скептически относиться к этому. Первый том нового издания ожидается в 2018 году.
Внутри объектной модели C++ (Стэнли Липпман) Если вы хотите узнать, как обычно реализуются виртуальные функции-члены и как базовые объекты обычно размещаются в памяти в сценарии с множественным наследованием, и как все это влияет на производительность, вот где вы найти подробные обсуждения таких тем.
Справочное руководство по C++ с аннотациями (Бьярн Страуструп, Маргарет А. Эллис) Эта книга сильно устарела, поскольку в ней исследуется версия C++ 2.0 1989 г. - шаблоны, исключения, пространства имен и новые приведения типов еще не были представлены. Тем не менее, эта книга проходит через весь стандарт C++ того времени, объясняя логику, возможные реализации и особенности языка. Это книга не для изучения принципов и шаблонов программирования на C++, а для понимания всех аспектов языка C++.
Мышление на C++ (Брюс Экель, 2-е издание, 2000 г.). Два тома; представляет собой бесплатный наборучебниковдля начинающих. Загрузки: том 1, том 2. К сожалению, они испорчены рядом тривиальных ошибок (например, поддержание того, что временные файлы автоматически
const
), без официального списка исправлений. Неполный 3 - й партийный список опечаток доступен на ( http://www.computersciencelab.com/Eckel.htm), но это, по- видимому, не поддерживается.Научный и инженерный C++: Введение в передовые методы и примеры (Джон Бартон и Ли Накман). Это всеобъемлющая и очень подробная книга, в которой сделана попытка объяснить и использовать все функции, доступные в C++, в контексте численных методов. В то время он представил несколько новых техник, таких как шаблон любопытно повторяющегося шаблона (CRTP, также называемый трюком Бартона-Накмана). Он стал пионером в нескольких методах, таких как анализ размеров и автоматическая дифференциация. Он поставляется с большим количеством компилируемого и полезного кода, от парсера выражений до оболочки Lapack. Код по-прежнему доступен здесь: http://www.informit.com/store/scientific-and-engineering-c-plus-plus-an-introduction-9780201533934. К сожалению, эти книги несколько устарели по стилю и возможностям C++, однако в то время (1994, до STL) это было невероятным прорывом. Главы, посвященные динамическому наследованию, немного сложны для понимания и не очень полезны. Обновленная версия этой классической книги, включающая семантику перемещения и уроки, извлеченные из STL, была бы очень хороша.