Описание тега c++
Что такое C++?
C++ - это статически типизированный, свободной формы, (обычно) скомпилированный, многопарадигмальный язык программирования общего назначения среднего уровня; не путать с C или C++ / CLI. Он был разработан в начале 1980-х Бьярном Страуструпом, первоначально как набор расширений языка программирования C. Основываясь на C, C++ улучшил безопасность типов и добавил поддержку автоматического управления ресурсами, объектной ориентации, общего программирования и обработки исключений, среди других функций.
Новичок в C++?
Если вы новичок в программировании или пришли к C++ с другого языка программирования, настоятельно рекомендуется иметь хорошую книгу для изучения языка. Ведем подробный список книг.
Если вы ищете хорошие компиляторы, GCC - наиболее часто используемый компилятор в Linux и других Unix-подобных платформах; Clang - официальный компилятор для Mac и FreeBSD; Microsoft Visual C++ - наиболее часто используемый компилятор в Windows. ++ компилятор Intel® C также широко используется для оптимизированных численных вычислений на Windows, Linux и Mac.
Turbo-C++ 3.0 выпущен в 1991 году, сильно устарел и определенно не рекомендуется. См. В предыдущем абзаце свободный выбор из этого тысячелетия.
Присоединяйтесь к нам в чате, где мы обсуждаем C++, программирование в целом и даже другие вещи, когда солнце садится и надвигается скука. Не забывайте о своем чувстве юмора, но сохраняйте его цивилизованность.
Использование тегов C++
Публикуя вопросы о программировании на C++, обязательно укажите:
- Информация о целевой системе и компиляторе. Это включает имя компилятора, версию и настройки, используемые для компиляции.
- Если ваш вопрос относится к одной конкретной версии языка, добавьте C++98 C++03 C++11 C++14 C++17 или C++20. Вопросы о повышении должны добавить тег boost. Подробности о различных версиях можно найти ниже в этой вики.
- Если в вопросе явно не указано, какая версия стандарта C++ используется, предполагается, что используется текущая версия. То есть, какую бы версию ISO 14882 в настоящее время ISO считает активной. Помните об этом, отвечая или комментируя вопросы с тегами C++.
Совместное использование c и C++
C и C++ - два разных и часто несовместимых языка. Избегайте использования обоих тегов в одном вопросе, если у вас нет веских причин.
Вопрос должен быть помечен c, только если:
- Он содержит чистый C, без следов C++ или вопросы с кодом, который может быть любым языком.
- Код компилируется с помощью компилятора C.
Вопрос должен быть помечен тегом C++, только если:
- Он содержит код с любыми функциями C++. Несмотря на то, что код может быть в стиле C.
- Код компилируется компилятором C++.
Вопрос должен быть помечен как c, так и C++, если он касается:
- Конкретные различия между C и C++.
- Совместимость или перенос кода между C и C++.
- Код C++, использующий библиотеки C (например, код, использующий
extern "C"
).
Рекомендации по редактированию и модерации сообщений с тегами c и C++:
Чтобы редактировать / изменять теги / модерировать вопросы с обоими тегами, рекомендуется, чтобы у вас были полные права редактирования и либо золотой значок c, либо золотой значок C++.
Если вы встретили сообщение с обоими тегами, при необходимости отредактируйте / поменяйте теги в соответствии с приведенными выше правилами. Если вы можете определить язык, прочитав опубликованный код, просто отредактируйте теги соответствующим образом. Избегайте спрашивать пользователя "это C или C++?" в комментариях, если вопрос действительно неясен.
Один из примеров неясного вопроса - это когда пользователь явно заявляет, что он программирует на C, но публикует код или сообщения компилятора для C++. Если да, запросите разъяснения и завершите голосование как неясное.
Мнения OP "Либо C, либо C++ в порядке" - явный признак плохого или неясного вопроса. Ответы могут сильно отличаться в зависимости от выбранного языка. Запросить разъяснения, закрыть как неясное / слишком широкое, пока ОП не разъяснит это.
Будьте осторожны с повторной пометкой вопросов после публикации ответов, особенно если уже опубликованы ответы на C и C++. В таких случаях теги следует оставить в покое, поскольку их изменение сделает опубликованные ответы недействительными.
Ответы с кодом C++ на вопрос C, который никогда не был помечен как C++, следует удалить как не по теме. Пожалуйста, проверьте историю редактирования вопроса, прежде чем отмечать / удалять такие ответы, чтобы убедиться, что у вопроса никогда не было тега C++.
C++11
Стандарт языка оставался практически таким же долгое время, но в 2011 году новый стандарт C++11 (ранее известный как C++0x) был опубликован в ISO / IEC 14882:2011. Вместо подхода "большого взрыва" он развертывается постепенно, поскольку компиляторы поддерживают новые языковые функции. См. Раздел часто задаваемых вопросов Бьярна Страуструпа по C++11, чтобы узнать, что нового в языке, и просмотреть часто задаваемые вопросы по вашему компилятору, чтобы узнать, какие из этих функций в настоящее время поддерживаются:
- Поддержка языка GCC и библиотеки libstdC++
- Поддержка языка Clang и поддержка библиотеки libC++
- Поддержка языка и библиотеки Microsoft Visual C++
- Поддержка языка Intel
Несколько функций, которые обсуждались для C++11, были отложены до следующей итерации.
C++14
C++14 - это небольшое расширение C++11. Он был одобрен в августе 2014 года и выпущен в декабре того же года. Ранее назывался C++1y, так как год утверждения был неопределенным. Многие популярные компиляторы уже имеют определенный уровень поддержки C++14.
- Поддержка языка GCCC++14
- Поддержка языка Clang C++14
- Поддержка языка Intel C++14
- Поддержка языка Microsoft Visual C++ C++14
C++17
С ++17 добавляет еще несколько основных функций (и несколько второстепенных). Обычно его называют C++1z или C++17, поскольку техническая работа над новым стандартом была завершена в марте 2017 года. Проект стандарта был одобрен (единогласно) ISO в сентябре 2017 года и официально опубликован в декабре. 2017 г.
- Поддержка языка GCCC++17
- Поддержка языка Microsoft Visual C++ C++17
- Поддержка языка Clang C++17
- Поддержка языка Intel C++17
C++20
Началась работа над стандартными изменениями для C++2a или C++20 с ожидаемой датой выпуска стандарта 2020 г.
Следующие (и другие) новые функции уже включены в черновик C++20:
- трехстороннее сравнение с использованием оператора new (космический корабль)
<=>
- назначенные инициализаторы (на основе функции C99 с некоторыми ограничениями)
- общие лямбда-выражения (списки параметров шаблона в лямбда-выражениях)
- оператор инициализации в пределах диапазона
for
петля - Обновление библиотеки chrono: новые часы, гражданский календарь, часовые пояса, форматирование в строку и синтаксический анализ
- пакет расширений в lambda init-capture
- концепции - требуются выражения, ограничения шаблона, библиотека концепций
- модули
улучшения параллелизма и добавление сопрограмм
Поддержка языка GCCC++20 добавить параметр командной строки
-std=c++2a
Поддержка языка Clang C++20 добавить параметр командной строки
-std=c++2a
Онлайн-компиляторы
Если вы хотите испытать C++, вы можете попробовать одну из следующих онлайн-служб компиляции:
- Колиру (GCC, Clang)
- https://ideone.com/ (GCC, Clang)
- кодовая панель (GCC)
- rextester (GCC, Clang, Visual C++)
- repl.it (GCC)
- ELLCC ( лязг)
- CodingGround (GCC)
- Оболочка C++ (GCC)
- Wandbox (GCC, Clang)
- Godbolt Explorer (GCC, Clang, ICC, Visual C++). Многие версии GCC/Clang для x86, а также для некоторых архитектур, отличных от x86 (ARM, ARM64, PPC и AVR), а также последние версии Microsoft Visual C++. Помимо выполнения (кнопка./a.out), он включает красиво отформатированный вывод на ассемблере, даже при необходимости выделяя цветом исходные строки и строки ассемблера, чтобы помочь найти, какая строка исходного кода соответствует какой строке ассемблера.
- C++ Insights (Clang) Транскомпилятор кода, который показывает код C++98, отображаемый на современные конструкции
- Quick bench (GCC, Clang) Микро-инструмент для тестирования производительности, предназначенный для быстрого и простого сравнения производительности фрагментов кода.
Часто задаваемые вопросы по C++ от stackru
- Как перебрать слова строки?
- Обычное приведение против static_cast против dynamic_cast
- Что означает явное ключевое слово?
- Что такое правило трех?
- В чем разница между переменной-указателем и переменной-ссылкой в C++?
- Что такое идиома копирования и обмена?
- Имеют ли значение круглые скобки после имени типа для нового?
- Почему программисты на C++ должны минимизировать использование "нового"?
- Полное руководство и список книг по C++
- Где мне найти текущие стандартные документы C или C++?
- Неопределенное, неопределенное и определяемое реализацией поведение
- Насколько неопределенным является неопределенное поведение?
- Что такое ошибка неопределенной ссылки / неразрешенного внешнего символа и как ее исправить?
- Окончательный список общих причин ошибок сегментации
- Почему std::getline() пропускает ввод после форматированного извлечения?
- Почему iostream::eof внутри условия цикла (т.е. `while (! Stream.eof())`) считается неправильным?
- Почему "using namespace std;" считается плохой практикой?
Внешние часто задаваемые вопросы
- ISOCPP унифицированный современный C++ FAQ
- C++ FAQ: ранее C++ FAQ Lite
- Часто задаваемые вопросы о шаблонах C++
- Часто задаваемые вопросы о стилях и методах C++ Бьярна Страуструпа
- Часто задаваемые вопросы о C++11 Бьярна Страуструпа
Другие внешние ресурсы
- Веб-сайт ISO C++
- Справочник по C++
- Документы комитета ISO по стандартам C++
- Основные принципы C++
- cplusplus: справочник, учебные пособия и история
- Гуру недели: серия статей о высококачественном, безопасном для исключений коде C++
- Пересмотренный гуру недели (для C++1y)
- Руководство программиста стандартной библиотеки шаблонов SGI
- Другие идиомы C++
Ресурсы по оптимизации для x86, включая встроенные функции C++ для векторных инструкций: ссылки на вики-страницу по тегам x86
- Руководство Агнера Фога по оптимизации для C/C++