C++ (Сі-плюс-плюс) — мова програмування загального призначення з підтримкою кількох парадигм програмування: об'єктно-орієнтованої, узагальненої, процедурної та ін. Б'ярн Страуструп () почав створювати C++ в AT&T Bell Laboratories (, Нью-Джерсі) у 1979 році. На етапі зародження мова мала назву «С з класами». Згодом Страуструп перейменував мову на C++ у 1984 р. Вперше описана міжнародним стандартом ISO/IEC 14882:1998 (C++98), найбільш актуальним же є стандарт ISO/IEC 14882:2026(C++26).

У 1990-х роках C++ стала однією з найуживаніших мов програмування загального призначення. Мову використовують для системного програмування, розробки прикладного програмного забезпечення, написання драйверів, потужних серверних та клієнтських програм, а також для розробки розважальних програм, наприклад, відеоігор. C++ суттєво вплинула на інші популярні сьогодні мови програмування: C# та Java.

Історія

Хронологія

Історія розвитку мови програмування C++ містить такі ключові події: квітень 1979 — початок роботи над Ci з класами (C with Classes) жовтень 1979 — робоча версія Ci з класами (з CPre компілятором) серпень 1983 — Ci з класами вперше використовується в Bell Labs 1984 — назва C++ лютий 1985 — перший зовнішній випуск компілятора C++ — Cfront Relese E (Educational — випуск для навчальних закладів) жовтень 1985 — перший комерційний випуск — Cfront 1.0 лютий 1987 — Cfront 1.2 грудень 1987 — перший випуск GNU C++ (1.13) 1988 — Перші випуски Oregon Software C++ і Zortech C++ червень 1989 — Cfront 2.0 1989 — книга «The Annotated C++ Reference Manual» (ARM); Засновано комітет ANSI C++ 1990 — перша технічна зустріч комітету ANSI C++; прийнято шаблони (templates), виняткові ситуації (exceptions); перший випуск Borland C++ 1991 — Перша зустріч комітету ISO/IEC; Cfront 3.0 (з шаблонами); книга «The C++ Programming Language» (2-га редакція) 1992 — Перші випуски IBM, DEC, Microsoft C++ 1993 — RTTI (Run-time type identification — визначення типу під час виконання) прийнято; простори назв (namespaces) і string (шаблонний за символьним типом) прийнято 1994 — прийнято STL 1997 — остаточне голосування комітету за завершений стандарт 1998 — ратифіковано стандарт ISO/IEC 14882:1998 C++ (так званий C++98) 2003 — ратифіковано стандарт ISO/IEC 14882:2003 C++ (так званий C++03); початок роботи над C++0x

Подальший розвиток описаний в статтях про відповідні версії C++.

В 2023 році, у категорії найпопулярніших мов програмування серед IT-спеціалістів згідно з рейтингом IEEE Spectrum та TIOBE, який охоплював 59 мов програмування, топ-5 виглядав так: Python, Java, C++, C, JavaScriptIEEE Spectrum опублікувала рейтинг найпопулярніших мов програмування 2023 року. // Автор: Артем Житкевич. 30.08.2023.

Історія назви Назва «Сі++» була вигадана Ріком Масситті (Rick Mascitti) і вперше було використана в грудні 1983 року. Раніше, на етапі розробки, нова мова називалася «Сі з класами». Ім'я, що вийшло у результаті, походить від оператора Сі «++» (збільшення значення змінної на одиницю) і поширеному способу присвоєння нових імен комп'ютерним програмам, що полягає в додаванні до імені символу «+» для позначення поліпшень. Згідно зі Страуструпом, «ця назва указує на еволюційну природу змін Ci». Виразом «С+» називали ранішню, не пов'язану з Сі++, мову програмування.

Деякі програмісти на Сі можуть відмітити, що якщо виконуються вирази x=3; y=x++; то в результаті вийде x=4 і y=3, тому що x збільшується тільки після присвоєння його у. Проте якщо другий вираз буде y=++x; то вийде x=4 і y=4. Виходячи з цього, можна зробити висновок, що логічніше було б назвати мову не Сі++, а ++Сі. Проте обидва вирази c++ і ++c збільшують с, а крім того вираз c++ поширеніший.

Педанти також можуть відмітити, що введення мови Сі++ не змінює самого Сі, тому найточнішим ім'ям було б «С+1».

Стандарт C++11

У серпні 2011 року завершилася тривала епопея з прийняттям нового стандарту для мови Сі++. Комітет ISO зі стандартизації C++ одноголосно затвердив специфікацію C++0X як міжнародний стандарт «C++11». Стандарт C++0X планувалося випустити ще в 2008 році, але його прийняття постійно відкладалося. Більшість представлених в стандарті можливостей вже підтримуються в таких компіляторах, як GCC, IBM C++, Intel C++ і Visual C++. стандартні бібліотеки з підтримкою C++ були реалізовані в рамках проекту Boost.

Новий стандарт розвивався понад 10 років і прийшов на зміну стандартам C++98 і C++03. Відзначається, що якщо відмінності між стандартами C++98 і C++03 були настільки незначними, що їх можна було не помітити, то стандарт C++11 містить низку кардинальних покращень, як самої мови, так і стандартної бібліотеки. За словами Б'ярна Страуструпа, творця C++, C++11 відчувається як нова мова, частини якої краще поєднуються одна з одною. У C++11 високорівневий стиль програмування став природнішим. Крім того, мова стала простішою для вивчення.

Стандарт C++14

Повна назва: «International Standard ISO/IEC 14882:2014(E) Programming Language C++». C++14 можна розглядати як невелике розширення для C++11, яке в основному містить виправлення помилок і незначні покращення.

Комітет з розробки нового стандарту опублікував чернетку N3690 15 травня 2013. Робочий варіант чернетки N3936 був опублікований 2 березня 2014 року, фінальний період голосування закритий 15 серпня 2014 року, а результат (одноголосне схвалення) оголошений 18 серпня 2014 року. Дата офіційного випуску C++14 — 15 грудня 2014.

Оскільки розробка стандарту була досить тривалою, і не було визначено року випуску, в період розробки також мав поширену назву «C++1y», аналогічно до того, як стандарт C++11 до його випуску називали «C++0x»(випуск цієї версії очікували до 2010 року).

Описані нижче можливості мови відповідають чернетці N3797 . Вони можуть дещо відрізнятися від остаточної версії стандарту .

Стандарт C++17

Стандарт C++17 дійшов до чорнової версії стандарту в березні 2017 року і, був остаточно затверджена 8 вересня 2017 року. Стандарт офіційно опублікований у грудні 2017. У C++17 було внесено ряд змін в мову, зокрема додано декілька нових бібліотек(<string_view>, <execution>), алгоритмів(std::exclusive_scan, std::for_each) та класів до STL, поліпшено роботу з лямбда-виразами, оновлено бібліотеку <thread> для мультипотокового програмування.

Стандарт C++20

Стандарт C++20 затверджено 4 вересня 2020 року. Стандарт офіційно опублікований у грудні 2020. Ця версія має набагато більше нововведень в порівнянні з C++14 та C++17.

Зокрема, ця версія вводить «концепції», співпрограми, новий оператор порівняння <=> тощо.

Стандарт C++23

Стандарт C++23 було затверджено 19 жовтня 2024 року. Він став не таким масштабним як C++20, але приніс у мову декілька нововведень такі як: std::print() як заміна std::cout, підтримка імпорту стандартної бібліотеки як C++20 модуль через import std;.

Стандарт C++26

Стандарт C++26 було затверджено 28 березня 2026 року та перебуває у фінальній стадії публікації. Цей стандарт став більшим ніж С++23 і додав низку значних можливостей до мови.

З основних нововведень є конструкції передумови(pre) та післяумови(post), простір імен std::meta для аналізу структур програми підчас компіляції та новий асинхронний фреймворк (std::execution).

Особливості При створенні C++ прагнули зберегти сумісність з мовою С. Більшість програм на С справно працюватимуть і з компілятором C++. C++ має синтаксис, заснований на синтаксисі С (див. список операторів мов С та C++).

Нововведеннями C++ порівняно з С є: підтримка об'єктно-орієнтованого програмування через класи; підтримка узагальненого програмування через шаблони; доповнення до стандартної бібліотеки; додаткові типи даних; обробка винятків; простори імен; вбудовані функції; перевантаження операторів; перевантаження імен функцій; посилання і оператори управління вільно розподіленою пам'яттю.

Приклади

Приклад програми «Hello, world!» Нижче наведено приклад простої програми на C++, яка виводить на стандартний потік виводу рядок Привіт, світе!. #include <iostream> // Підключення файлу з функціями та полями імен

using namespace std; // Використання поля імен

int main() // Це головна функція { cout << "Hello, world" << endl; return 0; // Каже те що програма завершилася нормально } // - це позначка початку коментаря

Приклад програми зі змінною

Після запуску програми на екрані з'явиться повідомлення Скільки вам років?, а курсор буде розміщений в наступному рядку. Там потрібно ввести цілочислове значення та натиснути клавішу Enter. Приклад: вводимо число 25, тоді з'явиться повідомлення Вам 25 років. #include <iostream>

using namespace std;

int main()

int age; // Змінна для запису віку cout << "How old are you?\n"; cin >> age; // Зчитування віку cout << "You are" << age << "years old.\n"; // Результат

return 0;

Технічний огляд

В 1998 році мова C++ була стандартизована Міжнародною організацією стандартизації під номером 14882:1998 — Мова Програмування C++. Поточний стандарт — C++11, він був прийнятий у 2011 році робочою групою МОС після десятирічної підготовки.

Стандарт C++ на 1998 рік складається з двох основних частин: ядра мови і стандартної бібліотеки. Стандартна бібліотека C++ увібрала в себе бібліотеку шаблонів STL, що розроблялася одночасно із стандартом. Зараз назва STL офіційно не вживається, проте в колах програмістів на C++ ця назва використовується для позначення частини стандартної бібліотеки, що містить визначення шаблонів контейнерів, ітераторів, алгоритмів і функторів.

Стандарт C++ містить нормативне посилання на стандарт Сі від 1990 року і не визначає самостійно ті функції стандартної бібліотеки, які запозичуються із стандартної бібліотеки С.

Поза тим, існує величезна кількість бібліотек C++, котрі не входять в стандарт. У програмах на C++ можна використовувати багато бібліотек С.

Стандартизація визначила мову програмування C++, проте за цією назвою можуть ховатися також неповні, обмежені достандартні варіанти мови. Спочатку мова розвивалася поза формальними рамками, спонтанно, у міру завдань, що ставилися перед ним. Розвиток мови супроводив розвиток кросс-компілятора Cfront. Нововведення в мові відбивалися в зміні номера версії кросс-компілятора. Ці номери версій кросс-компілятора розповсюджувалися і на саму мову.

Актуальний стандарт ухвалений в 2026 році C++26.

Стандартна бібліотека Стандартна бібліотека C++ включає стандартну бібліотеку С з невеликими змінами, які роблять її відповіднішою для мови C++. Інша велика частина бібліотеки C++ заснована на Стандартній Бібліотеці Шаблонів (STL). Вона надає такі важливі інструменти, як контейнери (наприклад, вектори і списки) і ітератори (узагальнені вказівники), що надають доступ до цих контейнерів як до масивів. Крім того, STL дозволяє схожим чином працювати і з іншими типами контейнерів, наприклад, асоціативними списками, стеками, чергами.

Використовуючи шаблони, можна писати узагальнені алгоритми, здатні працювати з будь-якими контейнерами або послідовностями, доступ до членів яких забезпечують ітератори.

Так само як і в С, можливості бібліотек активізуються використанням директиви #include для включення стандартних файлів. Всього в стандарті C++ визначено 50 таких файлів.

STL до включення в стандарт C++ була сторонньою розробкою, на початку — фірми HP, а потім SGI. Стандарт мови не називає її «STL», оскільки ця бібліотека стала невіддільною частиною мови, проте багато людей досі використовують цю назву, щоб відрізняти її від решти частини стандартної бібліотеки (потоки введення/виведення (Iostream), підрозділ Сі тощо). Проект під назвою STLport , заснований на SGI STL, здійснює постійне оновлення STL, IOstream і рядкових класів. Деякі інші проєкти також займаються розробкою приватних застосувань стандартної бібліотеки для різних конструкторських завдань. Кожен виробник компіляторів C++ обов'язково поставляє якусь реалізацію цієї бібліотеки, оскільки вона є дуже важливою частиною стандарту і широко використовується.