Вступ до C++: компілятор, IDE, перша програма, стандарти
C++ — мова системного й прикладного програмування з прямим керуванням пам'яттю і максимальною продуктивністю. На ньому пишуть ігри (Unreal Engine, Counter-Strike), браузери (Chrome, Firefox), фінансові системи, embedded, ОС, бази даних.
Чому C++
- Швидкість — близько до бінарних обмежень заліза
- Контроль пам'яті — сам вирішуєш коли і як виділяти/звільняти
- Багатопарадигмова — імперативна, ООП, шаблонне (generic), функціональна
- Зрілий ринок — Senior C++-розробники у топ-3 за зарплатою
- Близько до заліза — основа для embedded, real-time, ігор
⚠ C++ — складна мова. Потребує дисципліни. На відміну від Python, тут легко зробити витік пам'яті, undefined behavior, segfault.
Інструменти
Компілятор
- Linux/macOS:
g++(GCC) абоclang++— є з коробки або черезapt install build-essential - Windows: MSVC (Visual Studio Community) або MinGW
Перевір:
g++ --version # GCC 12+ або 13+ підтримує C++20/23
clang++ --version
IDE
- CLion (JetBrains, платний) — найкращий для C++
- Visual Studio (Windows, безкоштовний Community) — стандарт у Windows-світі
- VS Code + extensions C/C++ — легкий і зручний
Перша програма
hello.cpp:
#include <iostream>
int main() {
std::cout << "Привіт, C++!" << std::endl;
return 0;
}
Компіляція й запуск:
g++ -std=c++20 hello.cpp -o hello
./hello
-std=c++20 — використовуємо стандарт C++20. У старих туторіалах часто C++11 — це 2011 рік, давно застаріло. У 2026 актуальні C++20/23.
Структура
#include <iostream> // підключити стандартний потік вводу/виводу
int main() { // точка входу
// код
return 0; // 0 = успіх (POSIX-конвенція)
}
#include <...>— препроцесорна директива, додає декларації з заголовкового файлуint main()— кожна програма маєmainяк точку входу;в кінці кожної інструкції — обов'язково{}— блоки коду
std:: — простір імен
std::cout, std::endl, std::string — усе зі стандартної бібліотеки лежить у namespace std.
#include <iostream>
using namespace std; // ⚠ зручно, але не рекомендовано в великих проєктах
// бо може плутати імена з власними
В малих програмах using namespace std; ОК. У продакшені пишуть std:: явно або using std::cout;.
std::cout та std::cin
#include <iostream>
#include <string>
int main() {
std::string name;
std::cout << "Як тебе звуть? ";
std::cin >> name; // зчитати до пробілу
std::cout << "Привіт, " << name << "!\n";
int age;
std::cout << "Скільки років? ";
std::cin >> age;
std::cout << "Через 10 років буде " << (age + 10) << ".\n";
return 0;
}
<<— оператор виводу (виштовхуємо в потік)>>— оператор вводу (приймаємо з потоку)\n— новий рядок (швидше заstd::endl, який ще й скидає буфер)
Коментарі
// однорядковий
/*
багаторядковий
коментар
*/
Компіляція в кілька кроків
Великий проєкт зазвичай має кілька .cpp і .h файлів. Компілюється так:
g++ -c file1.cpp -o file1.o
g++ -c file2.cpp -o file2.o
g++ file1.o file2.o -o program
Або одною командою:
g++ -std=c++20 file1.cpp file2.cpp -o program
В реальних проєктах це робить CMake (стандарт у C++-світі) — не пишеш команди руками.
Стандарти
| Стандарт | Рік | Що приніс |
|---|---|---|
| C++98/03 | 1998/2003 | Базова мова |
| C++11 | 2011 | Революція: auto, lambdas, smart pointers, move-семантика |
| C++14 | 2014 | Дрібні покращення |
| C++17 | 2017 | structured bindings, optional, variant, filesystem |
| C++20 | 2020 | concepts, ranges, coroutines, modules |
| C++23 | 2023 | print, expected, mdspan |
У навчанні пишемо сучасний C++20 — не C++98.
Тест: перевір себе
- Що робить
#include <iostream>? - Чим
\nкраще заstd::endl? - Що значить
int main()повертає 0? - Чому
using namespace std;погано в великих проєктах? - Як скомпілювати з підтримкою C++20?
Відповіді
- Препроцесор додає декларації зі стандартного заголовкового файлу
iostream— це дає доступ доcout,cinтощо. \nлише вставляє символ нового рядка.std::endlще й примусово скидає буфер виводу — повільніше. Для більшості випадків\nдостатньо.- POSIX-конвенція: 0 = успішне завершення, ненульове число = помилка (різні коди для різних типів помилок).
- У великій кодовій базі багато ідентифікаторів.
std::робить явним джерело.using namespace std;затягує всі імена з std — може плутати з власними (наприклад,count,find). g++ -std=c++20 file.cpp -o program. Для clang:clang++ -std=c++20 ....