Как исключения C++ легко делают ваше программное обеспечение лучше и безопаснее
В чем проблема?
Если ваше программное обеспечение не проверяет и не устраняет ошибки, ваша программа может быть ненадежной. Клиенты сочтут это некачественным программным обеспечением.
Многие реальные программы не должны завершаться аварийно, и не только те, которые управляют медицинскими приборами или ракетами.
Если исключения не используются или не обрабатываются должным образом, процесс завершается аварийно. При вызове std::abort() или если реализация не разворачивает стек перед вызовом std::terminate(), деструкторы объектов могут не вызываться, а внешние ресурсы могут оставаться в неопределенном состоянии. Ненормальное завершение процесса - типичный вектор для атак типа "отказ в обслуживании" (DOS).
https://nexwebsites.com/blog/cpp_exceptions/
#cpp #programming
В чем проблема?
Если ваше программное обеспечение не проверяет и не устраняет ошибки, ваша программа может быть ненадежной. Клиенты сочтут это некачественным программным обеспечением.
Многие реальные программы не должны завершаться аварийно, и не только те, которые управляют медицинскими приборами или ракетами.
Если исключения не используются или не обрабатываются должным образом, процесс завершается аварийно. При вызове std::abort() или если реализация не разворачивает стек перед вызовом std::terminate(), деструкторы объектов могут не вызываться, а внешние ресурсы могут оставаться в неопределенном состоянии. Ненормальное завершение процесса - типичный вектор для атак типа "отказ в обслуживании" (DOS).
https://nexwebsites.com/blog/cpp_exceptions/
#cpp #programming
👍13🔥2❤1😁1
Media is too big
VIEW IN TELEGRAM
🚀 Практика языка C (МФТИ, 2023-2024). Интермедия. Стандарт языка C.
На этом занятии мы поговорим о стандарте C. Мы начнём с попытки изобрести очень простой язык программирования и увидим на его примере основные особенности поведения высокоуровневых программ. Далее мы подробно разберём разные формы поведения программ на языке C, познакомимся и потренируемся со стандартом языка.
У нас будет один вставной момент где я учу детей разбивать программы на модули и писать тесты. Это связано с тем что они сейчас делают проекты, можете это пропустить если смотрите эту лекцию в отрыве от основного курса.
В конце я приготовил небольшое рассуждение про важность стандартизации.
00:00 Язык программирования INC и поведение программ
12:38 Семантика и стандарт языка
23:50 Поведение программ
34:15 Неопределённое поведение
47:17 Тренировка в чтении стандарта и время решать задачи
50:20 Немного информации про проект и live coding
01:08:43 Стандарт как источник знаний
01:19:11 Важность стандартизации
▪источник
#cpp #programming
@cpluspluc
На этом занятии мы поговорим о стандарте C. Мы начнём с попытки изобрести очень простой язык программирования и увидим на его примере основные особенности поведения высокоуровневых программ. Далее мы подробно разберём разные формы поведения программ на языке C, познакомимся и потренируемся со стандартом языка.
У нас будет один вставной момент где я учу детей разбивать программы на модули и писать тесты. Это связано с тем что они сейчас делают проекты, можете это пропустить если смотрите эту лекцию в отрыве от основного курса.
В конце я приготовил небольшое рассуждение про важность стандартизации.
00:00 Язык программирования INC и поведение программ
12:38 Семантика и стандарт языка
23:50 Поведение программ
34:15 Неопределённое поведение
47:17 Тренировка в чтении стандарта и время решать задачи
50:20 Немного информации про проект и live coding
01:08:43 Стандарт как источник знаний
01:19:11 Важность стандартизации
▪источник
#cpp #programming
@cpluspluc
❤13👍9🔥1🥰1
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Задача о Ханойской башне
Быстрая сортировка (quick sort)
Бинарный поиск в отсортированном массиве
Сортировка методом выбора
Сортировка методом пузырька
Минимизация просмотров в методе сортировки пузырьком
Модифицированный метод пузырька
Сортировка методом вставок
Шейкер - сортировка
📌 источник
#алгоритмы #cpp #programming
@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31❤3🔥3
Media is too big
VIEW IN TELEGRAM
Лекция Константина Владимирова.
В языке C++ есть синтаксис и семантика.
Когда мы говорим о синтаксисе, мы говорим о контекстно-независимых конструкциях, которые просто что-то означают. Например, if — это всегда if.
Но когда мы говорим о семантике, мы сталкиваемся с необходимостью для компилятора что-то сделать или что-то выяснить: разрешить имя, инстанцировать шаблон, вывести тип, вычислить константное выражение.
Можно сказать что в каждый такой момент мы стартуем некий процесс, развивающийся по своим правилам.
Этот доклад посвящен описанию взаимодействующих семантических процессов в языке, как с точки зрения внутренностей компилятора, так и с точки зрения стандарта языка.
🏆 источник
#лекции #cpp #programming
@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍8❤2🤩2
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
1. Введение в шаблоны
2. C++20: requires keyword
3. C++20: concepts
4. Operator spaceship
5. ADL и CRTP
6 (семинар). Typelist
7. Traits, Policy Based Design, Mixins
8. Полиморфизм
9 (семинар). Реализация std::function
10 (семинар). Реализация std::any без виртуальных функций
📌 источник
#лекции #cpp #programming
@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥4❤3⚡1
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Основы программирования на С/C++
- Что такое IDE?
- Почему стоит изучать С++?
- Работа в Visual Studio C++ #1
- Первая программа на С++
#5 Escape последовательности и Raw-строки в C++
- Основные понятия языка С++
- Представление чисел в памяти компьютера
- Переменные и типы данных в С++
- Локальные и глобальные переменные
- Литералы
- Потоковый ввод вывод в С++
.
.
.
- Стек вызовов
- Перегрузка и шаблоны функций в С++
- Хвостовой возвращаемый тип в С++
- Параметры по умолчанию в функции С/С++
- Рекурсивные алгоритмы на языке С++
- Указатель на функцию в языке С++
- Динамическая память в языке С
- Динамическая память в языке C++
- Пример задачи на работу с динамической памятью в С++
- Двумерный динамический массивна Еськова. Основы программирования
✔️Доступно 56 видео
#cpp #programming
- Что такое IDE?
- Почему стоит изучать С++?
- Работа в Visual Studio C++ #1
- Первая программа на С++
#5 Escape последовательности и Raw-строки в C++
- Основные понятия языка С++
- Представление чисел в памяти компьютера
- Переменные и типы данных в С++
- Локальные и глобальные переменные
- Литералы
- Потоковый ввод вывод в С++
.
.
.
- Стек вызовов
- Перегрузка и шаблоны функций в С++
- Хвостовой возвращаемый тип в С++
- Параметры по умолчанию в функции С/С++
- Рекурсивные алгоритмы на языке С++
- Указатель на функцию в языке С++
- Динамическая память в языке С
- Динамическая память в языке C++
- Пример задачи на работу с динамической памятью в С++
- Двумерный динамический массивна Еськова. Основы программирования
✔️Доступно 56 видео
#cpp #programming
👍23🔥9❤7🥱5🖕1🗿1
🛰 Space Game GUI
Космическая игра, написанная на C++. Неплохой проект для изучения основ геймдева.
▪ Github
#cpp #programming #gamedev
@cpluspluc
Космическая игра, написанная на C++. Неплохой проект для изучения основ геймдева.
▪ Github
#cpp #programming #gamedev
@cpluspluc
👍20🔥7❤4
https://devblogs.microsoft.com/oldnewthing/20240802-00/
@cpluspluc
#cpp #programming
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤3🔥1
#программирование #programming
▪ Github
@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🔥4❤3🥰2
- введение в программирование на С++
- инкапсуляция
- наследование
- полиморфизм
- шаблоны и метапрограммирование
📌источник
#cpp #programming
@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍29❤12🔥8⚡2😁2
🕹️ Game Engine С++
01. Game Engine hardCORE серии. Promo
02. Сборка C++ проектов. Препроцессинг.
03. Сборка C++ проектов. Компиляция. Ассемблер. Теория.
04. Сборка C++ проектов. Оптимизации компилятора. Inline, constexpr, alignment.
05. Сборка C++ проектов. Linker. Forward declaration.
06. Сборка C++ проектов. Static/dynamic libraries. PCH. Unity (JUMBO) build.
📌 источник
#cpp #programming #ue5 #unrealengine
@cpluspluc
01. Game Engine hardCORE серии. Promo
02. Сборка C++ проектов. Препроцессинг.
03. Сборка C++ проектов. Компиляция. Ассемблер. Теория.
04. Сборка C++ проектов. Оптимизации компилятора. Inline, constexpr, alignment.
05. Сборка C++ проектов. Linker. Forward declaration.
06. Сборка C++ проектов. Static/dynamic libraries. PCH. Unity (JUMBO) build.
📌 источник
#cpp #programming #ue5 #unrealengine
@cpluspluc
🔥17👍5❤3❤🔥1🤔1
📌 Git Revert vs Git Reset: В чём разница? 🔄
Когда вы делаете ошибку в Git, важно понимать, как правильно её исправить. Два самых популярных способа —
### 🔹 Git Revert
- Создаёт новый коммит, который отменяет изменения из проблемного коммита.
- История сохраняется полностью — всё видно, даже ошибка.
- Безопасный вариант для публичных веток (например, `main`).
- Не удаляет коммиты — просто "откатывает" их эффект.
> 💡 Пример:
> C1 → C2 → C3 (ошибка) → C4: Revert C3
> Результат: ошибка отменена, но история остаётся полной.
🔹 Git Reset
- Удаляет коммит(ы) из истории.
- Изменяет историю репозитория — может быть опасно, если уже был пуш.
- Подходит только для локальных изменений или ещё не опубликованных коммитов.
- Есть три режима:
> 💡 Пример:
> C1 → C2 → C3 (ошибка) → C3 убрано
> Результат: история обрезана, как будто коммит никогда не был.
💡 Вывод:
📌 Понимание этих команд — ключ к уверенной работе с Git!
#Git #DevOps #Programming #junior
Когда вы делаете ошибку в Git, важно понимать, как правильно её исправить. Два самых популярных способа —
git revert и git reset. Но они работают по-разному!### 🔹 Git Revert
- Создаёт новый коммит, который отменяет изменения из проблемного коммита.
- История сохраняется полностью — всё видно, даже ошибка.
- Безопасный вариант для публичных веток (например, `main`).
- Не удаляет коммиты — просто "откатывает" их эффект.
> 💡 Пример:
> C1 → C2 → C3 (ошибка) → C4: Revert C3
> Результат: ошибка отменена, но история остаётся полной.
🔹 Git Reset
- Удаляет коммит(ы) из истории.
- Изменяет историю репозитория — может быть опасно, если уже был пуш.
- Подходит только для локальных изменений или ещё не опубликованных коммитов.
- Есть три режима:
soft, mixed, hard.> 💡 Пример:
> C1 → C2 → C3 (ошибка) → C3 убрано
> Результат: история обрезана, как будто коммит никогда не был.
💡 Вывод:
revert — безопасный и прозрачный способ отменить изменения. reset — мощный инструмент, но требует осторожности.📌 Понимание этих команд — ключ к уверенной работе с Git!
#Git #DevOps #Programming #junior
👍26❤6🥰1
Data-Parallel Types: алгоритмы (C++26)
Библиотека «data-parallel types» для SIMD-векторов (пространство имён
-
-
- Автор отмечает, что строка
-
- Показаны два примера: ограничение к диапазону
Итог
- Для SIMD-векторов доступны привычные «минимумы/максимумы» и покомпонентный
-
- Дальше автор планирует разбирать новые возможности C++26 (в частности, контракты).
https://www.modernescpp.com/index.php/data-parallel-types-algorithms/
#cpp #programming
Библиотека «data-parallel types» для SIMD-векторов (пространство имён
std::experimental, алиас stdx) предоставляет четыре специальных алгоритма: `min, max, minmax и clamp. min, max, minmax-
min(a, b) и max(a, b) принимают два SIMD-вектора и возвращают вектор покомпонентных минимумов/максимумов.-
minmax(a, b) возвращает пару SIMD-векторов: первый — покомпонентные минимумы, второй — максимумы.- Автор отмечает, что строка
stdx::minmax(a, b) у него не компилировалась ни в GCC, ни в Clang (на момент публикации). clamp-
stdx::clamp(v, lo, hi) применяет std::clamp к каждому элементу SIMD-вектора: значения ниже lo поднимаются до нижней границы, выше hi — опускаются до верхней.- Показаны два примера: ограничение к диапазону
INT8_MIN..INT8_MAX и к 0..UINT8_MAX; на выводах видно, как выходящие за пределы элементы прижимаются к границам. Итог
- Для SIMD-векторов доступны привычные «минимумы/максимумы» и покомпонентный
clamp.-
minmax задуман как удобный возврат пары (min/max), но в текущих компиляторах может не собираться.- Дальше автор планирует разбирать новые возможности C++26 (в частности, контракты).
https://www.modernescpp.com/index.php/data-parallel-types-algorithms/
#cpp #programming
👍8❤4🔥1
Media is too big
VIEW IN TELEGRAM
Веселье с type erasure: делаем обертку с семантикой значения для полиморфных типов
Павел Новиков
Цель доклада — познакомить с подноготной базовой реализации type erasure (т.н. «стирание типов») в C++, а также придать уверенности при возможном взаимодействии с подобным кодом.
Используя реализацию обертки с семантикой значения в качестве примера, мы посмотрели на то, как работает type erasure, похожий на std::any.
В отличие от повсеместно используемой семантики указателя или ссылки, в данном случае обертка с семантикой значения позволяет нам обращаться с полиморфными объектами со «стертыми типами» как с обычными значениями: перемещать их, копировать, присваивать новые значения, при этом всей головной болью владения (ownership) и клонирования объекта исходного типа займётся реализация «за кулисами».
источник
#cpp #programming
Павел Новиков
Цель доклада — познакомить с подноготной базовой реализации type erasure (т.н. «стирание типов») в C++, а также придать уверенности при возможном взаимодействии с подобным кодом.
Используя реализацию обертки с семантикой значения в качестве примера, мы посмотрели на то, как работает type erasure, похожий на std::any.
В отличие от повсеместно используемой семантики указателя или ссылки, в данном случае обертка с семантикой значения позволяет нам обращаться с полиморфными объектами со «стертыми типами» как с обычными значениями: перемещать их, копировать, присваивать новые значения, при этом всей головной болью владения (ownership) и клонирования объекта исходного типа займётся реализация «за кулисами».
источник
#cpp #programming
❤3🔥2😁1
This media is not supported in your browser
VIEW IN TELEGRAM
🐦 Flappy Bird на Си: Вес APK < 100 Килобайт! 🚀
В сентябре 2024 года, увидев Flappy Bird на C# в дискорд-канале Raylib, я решил попробовать реализовать эту игру на Си для Android с весом APK менее 100 КБ. 🚀
Идея казалась безумной, но спортивный интерес взял верх. 💪
https://github.com/VadimBoev/FlappyBird
#cpp #programming
В сентябре 2024 года, увидев Flappy Bird на C# в дискорд-канале Raylib, я решил попробовать реализовать эту игру на Си для Android с весом APK менее 100 КБ. 🚀
Идея казалась безумной, но спортивный интерес взял верх. 💪
https://github.com/VadimBoev/FlappyBird
#cpp #programming
👍8❤5🔥3
C умел «объектный стиль» задолго до модных споров про ООП.
В Linux-драйверах это видно особенно хорошо. Каждый драйвер фактически реализует интерфейс, просто заполняя структуру с указателями на функции.
file_operations из include/linux/fs.h - хороший пример. Ядро говорит: вот набор операций, которые может поддерживать файл, сокет или устройство. Драйвер сам решает, какие обработчики дать:
open
read
write
release
mmap
fsync
unlocked_ioctl
Если операция не нужна, поле остаётся NULL, и ядро использует поведение по умолчанию там, где это возможно.
По сути это тот же контракт между системой и реализацией, только без классов, наследования и рантаймовой магии. Есть таблица функций, есть объект, есть набор действий, которые с ним можно выполнить.
Именно поэтому C до сих пор живёт в ядрах, драйверах и системном коде. Он не навязывает модель абстракций, но даёт достаточно низкоуровневых инструментов, чтобы собрать нужную модель самому.
Просто вместо красивого слова interface у тебя struct с function pointers.
#programming #linux #c
В Linux-драйверах это видно особенно хорошо. Каждый драйвер фактически реализует интерфейс, просто заполняя структуру с указателями на функции.
file_operations из include/linux/fs.h - хороший пример. Ядро говорит: вот набор операций, которые может поддерживать файл, сокет или устройство. Драйвер сам решает, какие обработчики дать:
open
read
write
release
mmap
fsync
unlocked_ioctl
Если операция не нужна, поле остаётся NULL, и ядро использует поведение по умолчанию там, где это возможно.
По сути это тот же контракт между системой и реализацией, только без классов, наследования и рантаймовой магии. Есть таблица функций, есть объект, есть набор действий, которые с ним можно выполнить.
Именно поэтому C до сих пор живёт в ядрах, драйверах и системном коде. Он не навязывает модель абстракций, но даёт достаточно низкоуровневых инструментов, чтобы собрать нужную модель самому.
Просто вместо красивого слова interface у тебя struct с function pointers.
#programming #linux #c
👍17❤11🥰2🥱1
В 2003 году Джордж Марсалья представил xorshift - один из самых простых и быстрых генераторов псевдослучайных чисел.
Классический
xorshift32:
uint32_t xorshift32(void)
{
state ^= state << 13;
state ^= state >> 17;
state ^= state << 5;
return state;
}
Фактически весь алгоритм:
shift → XOR
shift → XOR
shift → XOR
При ненулевом начальном
state период может достигать:
2³² - 1
Никаких умножений, делений или тяжёлой математики, поэтому подобные RNG отлично подходят для игр, симуляций и procedural generation, где важна скорость.
Но есть нюанс: xorshift нельзя использовать для криптографии. Его внутреннее состояние можно предсказать, поэтому для ключей, паролей и токенов нужны криптографически стойкие генераторы.
Иногда действительно полезный алгоритм помещается буквально в три строки.
#Programming #Algorithms #C #Random
Please open Telegram to view this post
VIEW IN TELEGRAM
❤20🔥8👍2🥰1
⚡️ Один `static` - три разных смысла. Добро пожаловать в C.
В C ключевое слово
### 1.
Переменная имеет internal linkage - она доступна только внутри текущего
Это удобный способ спрятать детали реализации модуля.
### 2.
Он существует всё время работы программы и сохраняет значение между вызовами функции.
### 3.
Функция становится видна только внутри текущего translation unit.
Другой
Итого:
🔥 Поэтому
lifetime и linkage.
#C #Programming #SystemsProgramming #LowLevel #Cpp
В C ключевое слово
static меняет поведение в зависимости от того, где именно оно написано.### 1.
static у глобальной переменной
static int global;
Переменная имеет internal linkage - она доступна только внутри текущего
.c файла.Это удобный способ спрятать детали реализации модуля.
### 2.
static внутри функции
void foo(void) {
static int count;
count++;
}
count не создаётся заново при каждом вызове.Он существует всё время работы программы и сохраняет значение между вызовами функции.
foo(); // count = 1
foo(); // count = 2
foo(); // count = 3
### 3.
static у функции
static void bar(void) {
}
Функция становится видна только внутри текущего translation unit.
Другой
.c файл вызвать bar() напрямую уже не сможет.Итого:
static global variable -> скрыть символ внутри файла
static local variable -> сохранить состояние между вызовами
static function -> скрыть функцию внутри файла
🔥 Поэтому
static в C полезнее воспринимать не как одно конкретное поведение, а как подсказку проверить две вещи:lifetime и linkage.
#C #Programming #SystemsProgramming #LowLevel #Cpp
👍16🔥9❤6❤🔥1
💡 Clang умеет показывать AST, и это один из лучших способов реально понять, что компилятор видит в вашем C/C++ коде.
AST — это Abstract Syntax Tree, внутреннее представление программы после парсинга.
Например, простой код:
для компилятора — не просто строка текста, а дерево примерно такого смысла:
Именно через такое представление компилятор понимает структуру выражений, типы, области видимости и то, какие преобразования можно выполнить дальше.
У Clang AST можно получить напрямую:
А в Compiler Explorer / Godbolt есть отдельный режим просмотра AST, поэтому можно менять код и сразу видеть, как перестраивается дерево.
Особенно полезно разбирать так:
* шаблоны;
* перегрузку функций;
* implicit conversions;
*
* лямбды;
* range-based
* временные объекты;
* разные формы инициализации.
Если регулярно смотреть AST, C++ постепенно перестаёт выглядеть как набор «магических правил».
Начинаешь видеть код примерно так, как его видит компилятор.
🔗
#Cpp #Clang #Compiler #Programming
AST — это Abstract Syntax Tree, внутреннее представление программы после парсинга.
Например, простой код:
int x = a + b * 2;
для компилятора — не просто строка текста, а дерево примерно такого смысла:
VarDecl
└── BinaryOperator +
├── a
└── BinaryOperator *
├── b
└── 2
Именно через такое представление компилятор понимает структуру выражений, типы, области видимости и то, какие преобразования можно выполнить дальше.
У Clang AST можно получить напрямую:
clang++ -Xclang -ast-dump -fsyntax-only main.cpp
А в Compiler Explorer / Godbolt есть отдельный режим просмотра AST, поэтому можно менять код и сразу видеть, как перестраивается дерево.
Особенно полезно разбирать так:
* шаблоны;
* перегрузку функций;
* implicit conversions;
*
auto;* лямбды;
* range-based
for;* временные объекты;
* разные формы инициализации.
Если регулярно смотреть AST, C++ постепенно перестаёт выглядеть как набор «магических правил».
Начинаешь видеть код примерно так, как его видит компилятор.
🔗
https://godbolt.org/z/cfc7h41bT#Cpp #Clang #Compiler #Programming
👍19🔥8🥰4❤2💯1
📚 Отличная подборка материалов по современному C++
На Modernes C++ собрали большой структурированный каталог статей по языку - от базовых концепций до сложных тем из современного стандарта.
Что есть внутри:
- templates и metaprogramming;
- concurrency и multithreading;
- smart pointers и управление ресурсами;
- ranges, concepts и coroutines;
- STL и алгоритмы;
- memory model;
- best practices и типичные ошибки;
- новые возможности C++20/23 и дальше.
Удобно, что это не набор случайных постов, а фактически большая карта тем по современному C++.
Хороший ресурс, если хочется системно закрыть пробелы и глубже понять, как язык работает под капотом.
https://modernescpp.com/index.php/table-of-content/
#Cpp #CPlusPlus #Programming #STL #ModernCpp
На Modernes C++ собрали большой структурированный каталог статей по языку - от базовых концепций до сложных тем из современного стандарта.
Что есть внутри:
- templates и metaprogramming;
- concurrency и multithreading;
- smart pointers и управление ресурсами;
- ranges, concepts и coroutines;
- STL и алгоритмы;
- memory model;
- best practices и типичные ошибки;
- новые возможности C++20/23 и дальше.
Удобно, что это не набор случайных постов, а фактически большая карта тем по современному C++.
Хороший ресурс, если хочется системно закрыть пробелы и глубже понять, как язык работает под капотом.
https://modernescpp.com/index.php/table-of-content/
#Cpp #CPlusPlus #Programming #STL #ModernCpp
👍12❤3🔥2