C++ - это язык программирования общего назначения. Он был первоначально разработан как расширение для C и сохраняет похожий синтаксис, но теперь он совершенно другой язык. Используйте этот тег для вопросов о коде, который должен быть скомпилирован с помощью компилятора C++. Используйте тег версии для вопросов, связанных с конкретной стандартной версией [C++ 11], [C++ 17] и т.д.

Что такое C++?

C++ - это статически типизированный, свободно-формальный (обычно) скомпилированный, многопарадигменный, средний язык программирования общего назначения; не следует путать с C или C++/CLI. Он был разработан в начале 1980-х годов Bjarne Stroustrup, первоначально как набор расширений языка программирования C. На основе C, C++ улучшена безопасность типов и добавлена поддержка автоматического управления ресурсами, объектной ориентации, общего программирования и обработки исключений, среди других функций.


Новое в C++?

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

Если вы ищете хорошие компиляторы, GCC является наиболее часто используемым компилятором на Linux и других Unix-подобных платформах; Clang является официальным компилятором на Mac и FreeBSD; Microsoft Visual C++ наиболее часто используется в Windows. Компилятор Intel также широко используется для своих оптимизированных численных вычислений в Windows, Linux и Mac.

Turbo C++ 3.0 с 1991 года, крайне устарел и определенно не рекомендуется. См. Предыдущий параграф для бесплатных выборов в этом тысячелетии.

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


Использование тегов

При размещении вопросов о программировании C++, пожалуйста, включите:

  • Информация о целевой системе и компиляторе. Это включает имя компилятора, версию и параметры, используемые для компиляции.
  • Если ваш вопрос специфичен для одной конкретной версии языка, добавьте или . Вопросы о boost должны добавить тег . Подробности о различных версиях можно найти ниже в этой вики.
  • Если в вопросе явно не упоминается, какая версия используемого стандарта C++ используется, предполагается, что используется текущая версия. То есть, какая версия ИСО 14882, которую ИСО в настоящее время отображает как активную. Пожалуйста, имейте это в виду при ответе или комментировании вопросов с тегами .

Используя и вместе

C и C++ - два разных и часто несовместимых языка. Избегайте использования обоих тегов в том же вопросе, если у вас нет веских причин.

Вопрос должен быть помечен только , если:

  • Он содержит чистый C без каких-либо следов C++ или вопросов с кодом, который может быть либо языком.
  • Код компилируется с помощью компилятора C.

Вопрос должен быть помечен только с помощью , если:

  • Он содержит код с любыми функциями C++. Хотя код может быть "C-стиль".
  • Код компилируется с помощью компилятора C++.

Вопрос должен быть помечен как , так и , если речь идет о:

  • Конкретные различия между C и C++.
  • Совместимость или портирование кода между C и C++.
  • C++, который использует библиотеки C (например, код с использованием extern "C").

Рекомендации по редактированию и модерации для сообщений с тегами и :

Чтобы отредактировать/перемаркировать/умерить вопросы с обоими тегами, рекомендуется иметь полные права на редактирование и золотой значок или золотой .

Если вы столкнулись с сообщением с обоими тегами, отредактируйте/повторно пометьте его, если необходимо, в соответствии с приведенными выше правилами. Если вы можете указать язык, прочитав опубликованный код, просто отредактируйте теги соответствующим образом. Избегайте запроса пользователю "это C или C++?" в комментариях, если вопрос действительно неясен.

Одним из примеров неясного вопроса является то, что пользователь явно заявляет, что он программирует на C, но отправляет сообщения или сообщения компилятора для C++. Если да, попросите разъяснить и заострить голос как неясный.

"Либо C, либо C++ являются прекрасными" мнениями OP являются сильным признаком плохого или неясного вопроса. Ответы могут отличаться в зависимости от выбранного языка. Подсказка для уточнения, близкая неясная/слишком широкая, пока ОП не разъяснит это.

Будьте внимательны при повторной пометке вопросов, когда будут опубликованы ответы, особенно если уже есть сообщения C и C++. В таких случаях теги должны быть оставлены в покое, так как изменение их приведет к тому, что опубликованные ответы недействительны.

Ответы с кодом C++ на вопрос C, который никогда не был помечен , должны быть удалены как не относящиеся к теме. Перед тем, как пометить/удалить такие ответы, проверьте историю изменений вопроса, чтобы убедиться, что в вопросе никогда не было тега C++.


C++ 11

Стандарт языка оставался практически неизменным в течение длительного времени, но в 2011 году новый стандарт C++ 11 (ранее известный как C++ 0x) был опубликован в ISO/IEC 14882: 2011. Вместо того, чтобы использовать подход "большого взрыва", он постепенно расширяется, поскольку компиляторы поддерживают новые языковые функции. См. Bjarne Stroustrup C++ 11 Часто задаваемые вопросы, чтобы узнать, что нового на этом языке, и проверьте свой собственный вопрос о компиляторе, чтобы узнать, какая из этих функций в настоящее время поддерживается:

Несколько функций, которые обсуждались для C++ 11, были отложены до следующей итерации.


C++ 14

C++ 14 - небольшое расширение к C++ 11. Он был утвержден в августе 2014 года и выпущен в декабре того же года. Ранее упоминавшийся как C++ 1y, поскольку год утверждения был неопределенным. Многие популярные компиляторы уже имеют некоторый уровень поддержки C++ 14.


C++ 17

C++ 17 добавляет еще несколько основных функций (и несколько второстепенных). Обычно это обозначается как C++ 1z или C++ 17, поскольку техническая работа над новым стандартом была завершена в марте 2017 года. Проект стандарта был одобрен (единогласно) ISO в сентябре 2017 года и официально опубликован в декабре 2017.


C++ 20

Начались работы по стандартным изменениям для C++ 2a или C++ 20 с ожидаемой датой 2020 года для выпуска стандарта.

Следующие (и более) новые функции уже приняты в проекте C++ 20:

  • трехстороннее сравнение с использованием нового оператора <=>
  • назначенные инициализаторы (на основе функции C99 с несколькими ограничениями)
  • списки параметров шаблонов на лямбда-выражениях
  • дополнительная переменная с диапазоном for цикла
  • пакетные расширения в лямбда-init-capture

В настоящее время рассматривается ряд новых функций, включая:


Онлайн-компиляторы

Если вы хотите дать C++ спину, вы можете попробовать один из следующих онлайн-сервисов компилятора:

  • Coliru (GCC, Clang)
  • ideone.com (GCC, Clang)
  • кодовое слово (GCC)
  • реестр (GCC, Clang, Visual C++)
  • repl.it (GCC)
  • ELLCC (Clang)
  • CodingGround (GCC)
  • C++ Shell (GCC)
  • Wandbox (GCC, Clang)
  • Godbolt Explorer (GCC, Clang, ICC, Visual C++). Многие версии GCC/Clang для x86, а также некоторые архитектуры без архитектуры x86 (ARM, ARM64, PPC и AVR), а также последние версии Microsoft Visual C++. Включает в себя хорошо отформатированный ассемблерный выход, даже при необходимости выделяющий цвет источники и ассемблерные линии, чтобы помочь найти, какая строка исходного кода сопоставляет с линией ассемблера.


Переполнение стека C++ Часто задаваемые вопросы


Внешние часто задаваемые вопросы


Другие внешние ресурсы


Чаты