Ccpp

cpp

@cplusplustudy📚 Образование🇷🇺 Русский📅 март 2026 г.

Канал посвященный моим попыткам освоить C++ и немного компиляторы. Буду сюда кидать интересные для меня вещи.

📊 Полная статистика📝 Все посты
##include#39
47
Подписчики
189,278
Ср. охват
402.7%
Вовлечённость
18
Постов
В день

Графики

📊 Средний охват постов

📉 ERR % по дням

📋 Публикации по дням

📎 Типы контента

Лучшие публикации

18 из 18
Ccplusplustudy
cplusplustudy
4 сент., 21:18

https://telegra.ph/C-compilation-part-1-09-04

👁 443
Ccplusplustudy
cplusplustudy
13 февр., 20:11

Продолжение граблей со static_cast В прошлый раз мы выяснили что при касте к братскому классу компилятор вставит вызов метода того типа которым помечен объект. Рассмотрим данный код: struct Base {}; struct ActualChild : Base { int foo() { return 1; } }; struct OtherChild : Base { int foo() { return 2; } }; int main() { ActualChild actual; OtherChild other_ptr = static_cast<OtherChild>((Base*)&actual); return other_ptr->foo(); } https://godbolt.org/z/E1z194zf6 Результатом программы будет 2 и в ок...

👁 313
Ccplusplustudy
cplusplustudy
24 июн., 22:42

Битовые флаги Недавно наткнулся в одной библиотеке на интересный способ объявления и использования битовых флагов которым хочу поделиться. Но перед тем как перейти к нему хотел бы показать как я бы лично их реализовал и чем мой метод хуже. Для начала определение – под битовыми флагами я имею ввиду именованные свойства с которыми можно проводить битовые операции (побитовое И, побитовое ИЛИ и т.д). Определение наверно только запутало давайте лучше к примеру как я бы это реализовал: struct File { i...

👁 307
Ccplusplustudy
cplusplustudy
23 мар., 19:11

Оптимизация с использованием данных профилятора. Часть 2 Давайте посмотрим как это может работать. Шаг 1: Компилируем программу с несколькими флагами позволяющими сопоставить собранные метрики с исходным кодом: clang++ -O2 -gline-tables-only -fdebug-info-for-profiling -funique-internal-linkage-names sample.cc -o sample Шаг 2: Исполняем собранную программу с профилятором: sudo perf record -b -e BR_INST_RETIRED.NEAR_TAKEN:uppp ./sample 1 Шаг 3: Так как perf это внешняя для llvm утилита, нам нужно ...

👁 288
Ccplusplustudy
cplusplustudy
27 авг., 17:32

Продолжение. В таком случае нам на помощь приходит std::bit_cast , либо его аналог написанный вручную: #include <cstdint> #include <cstring> #include <iostream> struct Person { int age; char cityInfo[4]; }; struct City { long id; }; int main() { Person me; City city; std::memcpy(&city, &me.cityInfo, sizeof(City)); std::cout << city.id << std::endl; return 0; } И хоть в данном случае мы и выделили на стеке память под новую структуру, в реальности в большинстве случаев компилятор может оптимизиров...

👁 222
Ccplusplustudy
cplusplustudy
10 сент., 22:32

https://telegra.ph/C-Kompilyaciya-Preprocessor-09-10

👁 203
Ccplusplustudy
cplusplustudy
3 сент., 20:41

Еще одна проблема с переходом на низкоуровневые языки — операции с указателями (pointer). Про это знают, наверно, все программисты, но иногда случаются ситуации, в которых с первого раза и не предположить подводных камней. Рассмотрим следующий код: vector<int> v; v.push_back(1); cout << v[0] << " "; int p = &(--v.end()); (p) = 2; cout << v[0] << " "; (p) = 3; cout << v[0] << " "; Данный код выведет на экран значения: 1 2 3 Казалось бы все как мы и предполагали. Проблема данного кода в том, что в...

👁 196
Ccplusplustudy
cplusplustudy
11 февр., 17:50

Грабли со static_cast Недавно наткнулся на забавную багу в коде, которая заставила задуматься над поведением, казалось бы банального, static_cast. Давайте рассмотрим следующее дерево наследования: struct Base {}; struct ActualChild : Base {}; struct OtherChild : Base {}; Давайте теперь сделаем static_cast между братскими классами: ActualChild obj; ActualChild actual_ptr = &obj; Base base_ptr = actual_ptr; OtherChild other_ptr = static_cast<OtherChild>(base_ptr); В теории static_cast не должен де...

👁 193
Ccplusplustudy
cplusplustudy
2 февр., 15:36

Перегрузка операторов (часть 2) Ладно, вы еще не устали? Тогда вот вам на десерт самый абсурдный оператор. Оператор перечисления ,. Да, да, его можно перегрузить. Давайте для начала вспомним когда он может использоваться. Ну например в следующих строчках: int main() { int a = 0; int b = 0; for (a = 0, b = 0; a < 2 && b < 2; a++, b++); return a, b; } Что тут делает этот оператор? Правильно, вычисляет по цепочке все выражения и возвращает самое правое. Давайте попробуем его перегрузить: struct Cra...

👁 193
Ccplusplustudy
cplusplustudy
16 окт., 22:09

https://telegra.ph/Predkompilirovannye-zagolovki-10-16

👁 189

Типы хуков

Нейтральный14 | 196 просм.
Провокация2 | 161 просм.
Статистика2 | 172 просм.

Длина постов

Очень длинные (1000+)9 | 219 просм.
Короткие (<200)5 | 167 просм.
Длинные (500-1000)2 | 174 просм.
Средние (200-500)2 | 126 просм.

Типы контента

📝
18
text
189 просм.
cpp (@cplusplustudy) — Telegram-канал | PostSniper