C++那些事
——
光城的实验室
C++那些事 | Stories About C Plus Plus — сайт для изучения C++
简体中文
English
日本語
Español
Русский
Português
हिन्दी
Инициализация поиска
Light-City/CPlusPlusThings
Главная
Обзор проекта
Руководство по сборке и запуску
Основы и дальше
Анализ исходного кода
Идиомы
Современный C++
Инструменты
Бенчмарки
Практические проекты
Чтение и приёмы
Многопоточность
Учебные материалы
Связаться с автором
C++那些事
Практический подход: самый быстрый путь от основ к продвинутому C++.
Начать
Об авторе
C++那些事
Light-City/CPlusPlusThings
Главная
Обзор проекта
Руководство по сборке и запуску
Основы и дальше
Основы и дальше
C++ const: константы и квалификаторы
C++ static: члены и время жизни
C++ vptr и vtable
Полиморфизм C++ средствами C
C++: указатели и ссылки
C++: макросы и условная компиляция
Указатель this в C++
Встроенные функции в C++
Оператор sizeof в C++
Чистые виртуальные функции и абстрактные классы
Виртуальные функции в C++
Ключевое слово volatile в C++
Проверки assert в C++
Битовые поля в C++
C++ extern и связывание
C++ struct
struct против class
C++ union
Ключевое слово explicit в C++
C++ friend
C++ using: объявления и псевдонимы
Пространства имён в C++
C++ enum
C++ decltype
Глубже в механику языка
Глубже в механику языка
Ключевое слово mutable в C++
Семейство const в C++
ABI-совместимость string в C++
C++ ref и reference_wrapper
Подробно о std::function
Умные указатели как параметры
Подводные камни списка инициализации
Несколько возвращаемых значений
Деструкторы: C++ против Rust
Инициализация и присваивание
restrict и оптимизация
Устранение неоднозначности шаблонов
Хвостовая рекурсия в C++
vector: resize и reverse
Оператор разыменования *
Анализ исходного кода
Анализ исходного кода
Анализ STL: array
Анализ STL: deque
Анализ STL: queue и stack
Анализ STL: list
Анализ STL: vector
Анализ STL: typename
Приёмы traits в STL
Анализ STL: итераторы
STL EBO: оптимизация пустой базы
Красно-чёрное дерево в STL
STL set и multiset
STL map и multimap
STL hashtable
Пишем хеш-таблицу вручную
Анализ STL: unordered_map
Подробно о std::string
Вопросы на собеседовании: std::string
Аннулирование итераторов STL
Идиомы
Идиомы
Идиома: список инициализации
enum class: строгие перечисления
Управление ресурсами через RAII
Идиома: copy-and-swap
Идиома: Pimpl
Идиома: Mixin
Внедрение зависимостей в C++
Триграфы в C++
Как избегать конструкторов по умолчанию
Идиома: ленивые вычисления
Header-Only против разделения реализации
Шаблоны классов вместо шаблонов функций
Идиома: таблица поиска
Указатели на члены и информация о типах
Паттерн Singleton
Современный C++
Современный C++
C++11
C++11
Обзор нововведений C++11
std::move: принцип и использование
Вариативные шаблоны
std::bind против lambda
C++17
C++17
17 расширенных возможностей C++17
C++17 std::string_view
C++17: структурированные привязки
C++17: шаблоны переменных
C++17: [[nodiscard]]
C++17: ресурсы PMR
C++17: CTAD
C++17 std::variant
C++17 optional_ref
C++17: вывод auto в шаблонах
C++20
C++20
Путеводитель по C++20
Введение в корутины C++20
Библиотека Ranges в C++20
Модули C++20
Лямбды в C++20 (часть 1)
Каналы C++20 на практике
std::span: дизайн и подводные камни
C++20: порядок байтов
C++20: constexpr и оператор «запятая»
C++20: [[no_unique_address]]
Оператор <=>
Концепты C++20
C++20: [[likely]] и [[unlikely]]
Инструменты
Инструменты
CMake: основы и практика
Сборка C++ с Bazel
Сборка C++ с Meson
Начало работы с Conan
Отладка C++ в GDB
Отладка C++ в LLDB
Макрос отладки dbg-macro
Отладка Bazel + LLDB
Расширения GDB на Python
Поиск утечек памяти на практике
Debug-режим STL
Быстрый вывод STL-контейнеров
C++ в Jupyter Notebook
C++ Insights: взгляд компилятора
Преобразование string в int
Опции GCC подробнее
Форматирование C++ в VS Code
AddressSanitizer
Обнаружение утечек памяти
Анализ в Valgrind Massif
Бенчмарки
Бенчмарки
memcpy против std::copy
Бенчмарки SSO std::string
Полиморфизм: virtual, CRTP и variant
Практические проекты
Практические проекты
10-дневный интенсив C++
Ключевые упражнения C++
HTTP-сервер на корутинах C++20
Демо сокращателя ссылок
Небольшой проект на gRPC
Ускоряем Python через pybind11
Google Benchmark
Пишем FnOnce вручную
Межпроцессное взаимодействие
C++17 и SQLite: размер каталогов
Zero-copy сериализация Protobuf
Проектирование стекового калькулятора
Чтение и приёмы
Чтение и приёмы
Шесть способов разбить строку
Как читать open-source C++
Печать 1-100 без циклов
Забавный фрагмент C++
Заметки о расширениях CPython
Заметки о libcurl и C++
Многопоточность
Многопоточность
Читаем C++ Concurrency in Action
Начало работы с потоками
std::thread и jthread
Внутренности std::thread
Поиск взаимоблокировок
GDB: all-stop для потоков
Поиск ошибок через Helgrind
False sharing и кэш-линии
Параллельная STL в C++17
Векторизация SIMD в C++
Как работает цикл событий libev
Учебные материалы
Учебные материалы
30 лекций о современном C++ (GeekTime)
База знаний по C++
Видеокурсы C++ на Bilibili
Ресурсы и книги по C++
Связаться с автором
Главная
Последнее обновление:2026-10-12
Комментарии
К началу