ММаша С++

Маша С++

@masha_cpp💻 Технологии🇷🇺 Русский📅 март 2026 г.

Учу C++ и не только вместе с вами, мои котятки)

📊 Полная статистика📝 Все посты
##include#092#elifdef#ifdef#elif#endif#база#39
107
Подписчики
246,3
Ср. охват
230.2%
Вовлечённость
20
Постов
~0.1
В день

Графики

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

📉 ERR % по дням

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

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

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

20 из 20
Mmasha_cpp
masha_cpp
16 нояб., 11:05

Как подсчитать число выставленных битов (единиц) в целом беззнаковом? Давайте возьмем C++ 20, где в <bit> появилась функция std::popcount, которая делает, то что нам нужно: #include <iostream> #include <bit> #include <cstdint> int main() { uint8_t u1 = 0b00011101; unsigned u2 = 123; // 0b1111011 std::cout << std::popcount(u1) << " " << std::popcount(u2) << std::endl; // 4 6 return 0; } Скучно? На первый взгляд да, но в C++ всегда можно закопаться в детали =) Во-первых, что за странное название? ...

👁 417
Mmasha_cpp
masha_cpp
15 дек., 14:11

Давайте посмотрим на такой пример заголовочного файла (.h) c использованием указателя на incomplete тип (forward declaration): #include <memory> class ForwardDClass; class WithSmartPtr { public: WithSmartPtr() = default; ~WithSmartPtr() = default; private: ForwardDClass rawPtr_; //std::shared_ptr<ForwardDClass> sPtr_; //std::unique_ptr<ForwardDClass> uPtr_; }; int main(int argc, char argv<::>) { WithSmartPtr w; return 0; } Не будем вдаваться в корректность, посмотрим для начала на компилируемост...

👁 414
Mmasha_cpp
masha_cpp
15 июл., 15:02

Дочитываю книгу "Многопользовательские игры. Разработка сетевых приложений". Неплохое введение в компьютерные сети для тех кто хочет быстро разобраться или вспомнить как работает IP, Nat и тп, а также вводная глава про программирование сетевых сокетов. Примеры на C++. #книги

👁 364📷 photo
Mmasha_cpp
masha_cpp
15 мая, 16:43

Нам всегда говорили, что бросать исключения из деструктора это плохая идея. Один из примеров плохого результата - это раскручивание стека при обработке исключения, когда вызываемые деструкторы приводят к повторному исключению, которое кроме как вызовом terminate() толком не обработаешь. Но что, если выбросить исключение очень хочется, ведь мы сделаем всё "аккуратно"? Давайте посмотрим на такой код: #include <iostream> struct ThrowsInDtor { ~ThrowsInDtor() { std::cout << "~ThrowsInDtor" << std::e...

👁 362
Mmasha_cpp
masha_cpp
15 июн., 14:37

Объединения (union-ы) позволяют хранить данные разных типов в одной области памяти. Пример: #include <iostream> union IPv4Address { uint32_t i; uint8_t c[4]; }; int main(int argc, char* argv<::>) { IPv4Address a; memset(&a, 0, sizeof(a)); a.c[0] = 10; a.c[1] = 0; a.c[2] = 0; a.c[3] = 1; std::cout << (int)a.c[0] << std::endl; std::cout << a.i << std::endl; // don't do this, just an example return 0; } Но можно ли наследовать union? Давайте попробуем: struct IPv4AddressWithPort : IPv4Address { uin...

👁 355
Mmasha_cpp
masha_cpp
15 окт., 18:38

Многим известно как работает dynamic_cast в C++. Зная, что за указателем на базовый класс стоит объект производного, мы можем скастовать базовый до производного и вызвать его метод. Пример: struct Base { virtual ~Base() = default; }; struct Derived : public Base { void doDerivedJob() { std::cout << "derived" << std::endl; } }; void cast(Base baseP) { Derived d = dynamic_cast<Derived>(baseP); if (d) { d->doDerivedJob(); } else { std::cout << "ptr: unable to cast" << std::endl; } } int main(int ar...

👁 324
Mmasha_cpp
masha_cpp
15 сент., 15:16

Как можно оформить в C++ длинный строковый литерал и разбить его на нескольксо строк в коде? Допустим, мы хотим разбить длинную строку в коде на несколько линий, но так чтобы переносы строк и отступы из самого кода не повлияли на результат. Один из проcтейших способов - просто написать строки в кавычках друг за другом: std::string str1 = "Если ты, следуя правому разуму, будешь старательно," " ревностно и любовно относиться к делу, которым ты в" " данный момент занят..."; std::cout << str1 << std...

👁 306
Mmasha_cpp
masha_cpp
17 авг., 09:10

Многим известно, что std::string можно создать из указателя на char (допустим из некой C-шной функции): #include <iostream> #include <string> static std::string str = "OK"; const char getStr() { return str.c_str(); } int main() { std::cout << "str: " << std::string(getStr()) << std::endl; } Но что будет, если нам прилетит nullptr и мы передадим его в конструктор std::string? const char* getStr() { return nullptr; //return str.c_str(); } Можно подумать, что создастся пустая строка. В конце концов...

👁 285
Mmasha_cpp
masha_cpp
8 мая, 15:27

#база Какой из обработчиков catch сработает в таком коде? #include <iostream> class BaseException : public std::exception {}; class DerivedException : public BaseException {}; int main(int argc, char* argv<::>) { try { throw DerivedException(); } catch (const std::exception&) { std::cout << "std::exception" << std::endl; } catch (const BaseException&) { std::cout << "BaseException" << std::endl; } catch (const DerivedException&) { std::cout << "DerivedException" << std::endl; } return 0; } Не см...

👁 262
Mmasha_cpp
masha_cpp
15 янв., 12:52

По умолчанию, при форматировании вывода в поток булевых значений, будет использоваться 1 и 0 для true и false. Пример: bool t = true; bool f = false; std::cout << t << " " << f << std::endl; // Выведет: 1 0 Возможно, что удобнее (особенно для отладки) выводить булевы значения строкой, также как они задаются в коде. Для этого нужно добавить в поток манипулятор boolalpha: std::cout << std::boolalpha; std::cout << t << " " << f << std::endl; // Выведет: true false Интересно то, что манипулятор дейс...

👁 238

Типы хуков

Нейтральный13 | 262 просм.
Вопрос5 | 263 просм.
Статистика2 | 103 просм.

Длина постов

Очень длинные (1000+)8 | 313 просм.
Длинные (500-1000)4 | 263 просм.
Короткие (<200)4 | 139 просм.
Средние (200-500)4 | 204 просм.

Влияние эмодзи

226
С эмодзи (3)
250
Без эмодзи (17)
-9.6% охвата

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

📝
17
text
246 просм.
📷
3
photo
245 просм.