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++ 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++ Часто задаваемые вопросы


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


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


Чаты