C++ — это язык программирования общего назначения. Изначально он разрабатывался как расширение C и имел аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде, который будет скомпилирован с помощью компилятора C++. Используйте тег версии для вопросов, связанных с конкретной стандартной версией [C++11], [C++14], [C++17], [C++20] или [C++23]. и т.д.
Что такое С ++?
C++ — это (в основном) статически типизированный, свободный формат, (обычно) скомпилированный, мультипарадигменный, промежуточный уровень. язык программирования общего назначения; не путать с cили c++-cli. Он был разработан в начале 1980-х годов Бьерном Страуструпом, первоначально как набор расширений для языка программирования C. Основываясь на C,C++улучшеннаябезопасность типов< /a>и добавлена поддержка автоматического управления ресурсами, объектной ориентации, универсального программирования и обработки исключений, среди других функций.
Новичок в C ++?
Если вы новичок в программировании или пришли к C ++ с другого языка программирования, настоятельно рекомендуется иметь хорошую книгу для изучения языка. Мы ведем подробный список книг.
Если вы ищете хорошие компиляторы, GCCявляется наиболее часто используемым компилятором в Linux и других Unix-подобных платформах; Clang- официальный компилятор для Mac и FreeBSD; Microsoft Visual C ++- это наиболее часто используемый компилятор в Windows. Intel® C ++ Compilerтакже обычно используется для его оптимизированных численные вычисления в Windows, Linux и Mac.
Turbo-C++ 3.0 выпущен в 1991 году, крайне устарел и не рекомендуется. См. предыдущий абзац для свободного выбора из этого тысячелетия.
Присоединяйтесь к нам в чате, где мы обсуждаем C ++, программирование в целом и даже другие вещи, когда солнце садится и наступает скука. Не забывайте о своем чувстве юмора, но сохраняйте его цивилизованным.
c++Использование тегов
При публикации вопросов о программировании на C ++ обязательно указывайте:
- Информация о целевой системе и компиляторе. Это включает имя компилятора, версию и параметры, используемые для компиляции.
- Если ваш вопрос относится к одной конкретной версии языка, добавьтеc++98c++03c++11c++14c++17,c++20c++23. В вопросы о повышении следует добавлять тег 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 (например, код с использованием
extern "C"
).
Правила редактирования и модерации для сообщений с тегами cи c++:
Чтобы редактировать / повторно помечать / модерировать вопросы с обоими тегами, рекомендуется, чтобы у вас были полные права редактирования и либо золотой c, либо золотой C ++значок .
Если вы столкнулись с сообщением с обоими тегами, отредактируйте / повторно пометите его, если необходимо, в соответствии с вышеуказанными правилами. Если вы можете сказать язык, прочитав опубликованный код, просто отредактируйте теги соответствующим образом. Избегайте подсказок пользователю "это C или C ++?" в комментариях, если вопрос действительно неясен.
Один из примеров неясного вопроса — когда пользователь явно заявляет, что программирует на C, но публикует код или сообщения компилятора для C++. Если это так, запросите разъяснения и закройте голосование как неясное.
Мнения OP «Либо C, либо C ++ в порядке» являются явным признаком плохого или неясного вопроса. Ответы могут сильно отличаться в зависимости от выбранного языка. Запрашивайте разъяснения, закрывайте как неясные/слишком широкие, пока ОП не разъяснит это.
Будьте осторожны с повторной пометкой вопросов, когда будут опубликованы ответы, особенно если уже есть ответы на C и C ++. В таких случаях теги должны быть оставлены в покое, поскольку их изменение сделает опубликованные ответы недействительными.
Ответы с кодом C ++ на вопрос C, который никогда не был помечен как c++, следует удалить как не по теме. Пожалуйста, проверьте историю редактирования вопроса, прежде чем отмечать / удалять такие ответы, чтобы убедиться, что у вопроса никогда не было тега C ++.
c++98
В 1998 году комитет по стандартам C ++ опубликовал первый международный стандарт для C ++ ISO / IEC 14882: 1998. , который был бы неофициально известен как C ++ 98.
c++03
В 2003 году комитет C++ отреагировал на многочисленные проблемы, о которых сообщалось в c++98, и соответствующим образом пересмотрел его. Измененный язык получил название C++03.
c++11
Стандарт языка оставался практически неизменным долгое время, но в 2011 году новый стандарт C ++ 11 (ранее известный как C ++ 0x) был опубликован в ISO/IEC 14882: 2011. Вместо подхода «большого взрыва» он развертывается постепенно, поскольку компиляторы поддерживают новые языковые функции. См. часто задаваемые вопросы Бьярна Страуструпа по C ++ 11, чтобы узнать, что нового в языке, и просмотреть часто задаваемые вопросы о вашем собственном компиляторе. какие из этих функций в настоящее время поддерживаются:
- языковая поддержка GCCи libstdc++ поддержка библиотеки
- Поддержка языка Clang
- Поддержка языка и библиотек Microsoft Visual C ++
- Поддержка языков Intel
Несколько функций, которые обсуждались для C ++ 11, были перенесены на следующую итерацию.
c++14
C++14 — это небольшое расширение C++11. Он был одобрен в августе 2014 года и выпущен в декабре того же года. Ранее упоминавшийся как C++1y год утверждения был неопределенным. Многие популярные компиляторы уже имеют некоторый уровень поддержки C++14.
- Поддержка языка GCC C ++ 14
- Поддержка языка Clang C ++ 14
- Поддержка языка Intel C ++ 14
- Поддержка языка Microsoft Visual C ++ C ++ 14
c++17
C++17 добавляет еще несколько важных функций (и несколько второстепенных). Обычно его называют C++1z или C++17, поскольку техническая работа над новым стандартом была завершена в марте 2017 года. Проект стандарта был одобрен (единогласно) ISOв сентябре 2017 г. и официально опубликованов декабре 2017 г.
- Поддержка языка GCC C ++ 17
- Поддержка языка Microsoft Visual C ++ C ++ 17
- Поддержка языка Clang C ++ 17
- Поддержка языка Intel C ++ 17
c++20
В феврале 2020 года комитет по стандарту C ++ завершил работу над C ++ 20. Позднее в том же году он был единогласно одобрен и официально опубликован в декабре 2020 года.
Следующие (и более) новые функции уже приняты в C ++ 20:
трехстороннее сравнениес использованием оператора new (космический корабль)
<=>
назначенные инициализаторы(на основе функции C99 с некоторыми ограничениями)
общие лямбда-выражения(списки параметров шаблона в лямбда-выражениях)
оператор инициализации в цикле
for
на основе диапазонаОбновление библиотеки chrono: новые часы, гражданский календарь, часовые пояса, форматирование в строкуи синтаксический анализ
концепции - требуются выражения, ограничения шаблона, библиотека концепций
улучшения параллелизма и добавление сопрограмм
Поддержка языка GCC C ++ 20добавить параметр командной строки
-std=c++20
(используйте {{X1} } в GCC 9 и ранее)Поддержка языка Clang C ++ 20добавьте параметр командной строки
-std=c++20
(используйте-std=c++2a
в Clang 9 и ранее)
c++23
Следующие (и другие) новые функции уже включены в черновик C ++ 23:
Предложение по признаку типа для обнаружения перечислений с ограниченным объемом
Clang Поддержка языка C ++ 23добавить параметр командной строки
-std=c++2b
начиная с Clang 12
Онлайн-компиляторы
Если вы хотите попробовать C ++, попробуйте один из следующих онлайн-сервисов компилятора:
- Coliru(GCC, Clang)
- ideone.com(GCC, Clang)
- кодовая панель(GCC)
- rextester(GCC, Clang, Visual C ++)
- repl.it(GCC)
- ELLCC(Clang)
- CodingGround(GCC)
- Оболочка C ++(GCC)
- Wandbox(GCC, Clang)
- Обозреватель компиляторов(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++-faqпо C ++ от Stack Overflow
- Как мне перебрать слова строки?
- Когда следует использовать static_cast, dynamic_cast, const_cast и reinterpret_cast?
- Что означает явное ключевое слово?
- Что такое правило трех?
- В чем разница между переменной-указателем и переменной-ссылкой?
- Что такое идиома копирования и обмена?
- Есть ли в скобках после имени типа разница с новым?
- Почему программисты на C ++ должны минимизировать использование «нового»?
- Полное руководство и список книг C ++
- Где я могу найти текущие стандартные документы C или C ++?
- Неопределенное, неопределенное и определяемое реализацией поведение
- Насколько неопределенным является неопределенное поведение?
- Что такое неопределенная ссылка / неразрешенная внешняя ошибка символа и как ее исправить?
- Окончательный список распространенных причин ошибок сегментации
- Почему std :: getline () пропускает ввод после форматированного извлечения?
- Почему iostream :: eof внутри условия цикла (то есть `while (! Stream.eof ())`) считается неправильным?
- Почему "using namespace std;" считается плохой практикой?
Внешние часто задаваемые вопросы
- Унифицированные часто задаваемые вопросы о современном C ++ ISOCPP, преемник онлайновых часто задаваемых вопросов по C ++ Lite от Marshall Cline
- FAQ по шаблонам C ++
- Bjarne Stroustrup: часто задаваемые вопросы по стилю и технике C ++
- Часто задаваемые вопросы Бьярна Страуструпа по C ++ 11
Другие внешние ресурсы
cplusplus: справочник, учебные пособия и история
Гуру недели: серия статей о высококачественном и безопасном коде C ++.
Ресурсы по оптимизации для x86, включая встроенные функции C ++ для векторных инструкций: x86