Например, DNS-сервер преобразует доменное имя в IP-адрес, а кеш-сервер ускоряет отдачу данных, снижая нагрузку на базу.
На картинке — фундамент серверной инфраструктуры, без которой не работает ни одно современное приложение.
Сохрани, чтобы не забыть!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥7❤4
Заменить значение и забрать старое — std::exchange!
Иногда нужно “переключить” переменную на новое значение и при этом сохранить старое: например, сбросить флаг, обнулить указатель, забрать ресурс у объекта. Вместо двух строк и временной переменной есть удобная функция
Сначала типичный “ручной” вариант:
Теперь то же самое одной строкой:
Частый практический кейс — “забрать” указатель и обнулить его, чтобы избежать повторного использования:
И ещё один популярный пример — move-конструктор, где нужно забрать ресурс и оставить исходный объект в безопасном состоянии:
🔥
📣 C++ Ready | #практика
Иногда нужно “переключить” переменную на новое значение и при этом сохранить старое: например, сбросить флаг, обнулить указатель, забрать ресурс у объекта. Вместо двух строк и временной переменной есть удобная функция
std::exchange.Сначала типичный “ручной” вариант:
int old = value;
value = 0;
use(old);
Теперь то же самое одной строкой:
std::exchange возвращает старое значение и записывает новое:int old = std::exchange(value, 0);
use(old);
Частый практический кейс — “забрать” указатель и обнулить его, чтобы избежать повторного использования:
T* take_ptr(T*& p) {
return std::exchange(p, nullptr);
}И ещё один популярный пример — move-конструктор, где нужно забрать ресурс и оставить исходный объект в безопасном состоянии:
struct Buffer {
int* data = nullptr;
Buffer(Buffer&& other) noexcept
: data(std::exchange(other.data, nullptr)) {}
};std::exchange делает намерение явным: “забрать старое, поставить новое” — меньше кода, меньше шансов забыть сбросить состояние.Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥10❤4
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🤝31🔥17❤4👍1
В этой статье:
• Понять, как RAII помогает строить архитектуру и инварианты• Увидеть примеры управления разными ресурсами (не только памятью)• Научиться делать код устойчивым к исключениям и “утечкам ответственности”🔊 Продолжай читать на Habr!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍6❤5😁1
Безопасный “побитовый каст” без UB — std::bit_cast!
Иногда нужно посмотреть на биты значения: получить IEEE754-представление
Многие делают это через
Сначала типичный “ручной” (опасный) вариант:
Теперь то же самое правильно одной строкой:
Частый практический кейс — быстро проверить знак/экспоненту
Ещё один популярный пример — получить “сырой”
И обратная операция — восстановить значение из битов (тоже безопасно, если размер совпадает):
🔥
📣 C++ Ready | #практика
Иногда нужно посмотреть на биты значения: получить IEEE754-представление
float, собрать/разобрать сетевой пакет, сделать хеш по битам, интерпретировать double как uint64_t.Многие делают это через
reinterpret_cast или “указательную магию” — и ловят UB из-за strict aliasing и выравнивания.Сначала типичный “ручной” (опасный) вариант:
float f = 1.0f;
auto u = *reinterpret_cast<std::uint32_t*>(&f); // UB!
use(u);
Теперь то же самое правильно одной строкой:
std::bit_cast (C++20) копирует биты между типами одинакового размера:float f = 1.0f;
auto u = std::bit_cast<std::uint32_t>(f);
use(u);
Частый практический кейс — быстро проверить знак/экспоненту
float без математики:bool is_negative(float x) {
auto bits = std::bit_cast<std::uint32_t>(x);
return (bits >> 31) != 0;
}Ещё один популярный пример — получить “сырой”
uint64_t из double для стабильного сравнения/логирования битов:std::uint64_t raw_bits(double d) {
return std::bit_cast<std::uint64_t>(d);
}И обратная операция — восстановить значение из битов (тоже безопасно, если размер совпадает):
double from_bits(std::uint64_t bits) {
return std::bit_cast<double>(bits);
}std::bit_cast делает намерение явным: “мне нужны биты, а не преобразование значения” — без reinterpret_cast, без строгого алиасинга, меньше шансов поймать UB.Please open Telegram to view this post
VIEW IN TELEGRAM
❤14🔥7👍5
This media is not supported in your browser
VIEW IN TELEGRAM
Бесплатный “one-stop shop” для подготовки к USACO: структурированные разделы от Intro и Bronze до Platinum/Advanced, где в каждом модуле есть объяснение темы, советы по реализации, подборка задач для практики и разборы/редакции
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👍6🔥4🤝1
Почему std::move не “перемещает”?
Многие думают, что
Проблема начинается, когда после
После перемещения объект обязан оставаться валидным, но его состояние становится неопределённым (у
Правильное правило простое:
•
• после этого
🔥 Итог:
📣 C++ Ready | #совет
Многие думают, что
std::move(x) физически “переносит” данные и очищает x. Но std::move ничего не двигает — это всего лишь приведение к rvalue-ссылке, то есть сигнал компилятору: “этот объект можно перемещать”.Проблема начинается, когда после
std::move мы продолжаем пользоваться объектом как раньше:std::string s = "hello";
std::string a = std::move(s);
std::cout << s; // ❌ логическая ошибка
После перемещения объект обязан оставаться валидным, но его состояние становится неопределённым (у
std::string часто будет пусто, но полагаться на это нельзя). Поэтому любые “проверю что осталось” и “ещё раз использую” — источник багов.Правильное правило простое:
•
std::move(x) = “я отказываюсь от значения x”• после этого
x можно только: присвоить новое значение / уничтожить / вызвать безопасные операции, не зависящие от содержимого.std::move — не перенос, а разрешение на перенос. Если ты пишешь std::move, считай, что “объект дальше мне не нужен” — так код становится предсказуемым и без скрытых сюрпризов.Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🔥6❤5🤝2
Антипаттерн: # define DEBUG 1 vs NDEBUG
Часто для отладочного кода делают что-то вроде
Работает? Да.
Надёжно? Не всегда.
Проблема в том, что такой
В стандарте C++ уже есть специальный макрос для этого —
Именно на него завязаны
Плохой вариант:
Если забыть убрать
Правильный вариант — ориентироваться на
Теперь всё согласовано:
• debug-сборка → логирование и проверки есть
• release (
Точно так же стоит писать и свои отладочные макросы:
🔥 Использование
📣 C++ Ready | #практика
Часто для отладочного кода делают что-то вроде
#define DEBUG 1 и оборачивают всё в #ifdef DEBUG.Работает? Да.
Надёжно? Не всегда.
Проблема в том, что такой
DEBUG — не стандартный, и он легко расходится с реальным типом сборки. В итоге можно случайно оставить отладочный код в релизе.В стандарте C++ уже есть специальный макрос для этого —
NDEBUG. Если NDEBUG не определён, значит это debug-сборка. Если NDEBUG определён, значит релиз.Именно на него завязаны
assert и многие стандартные проверки.Плохой вариант:
#define DEBUG 1
void foo(int x) {
#ifdef DEBUG
std::cout << "x = " << x << "\n";
#endif
work(x);
}
Если забыть убрать
DEBUG или определить его не там — отладочный код спокойно уедет в прод.Правильный вариант — ориентироваться на
NDEBUG:void foo(int x) {
#ifndef NDEBUG
std::cerr << "x = " << x << "\n";
#endif
work(x);
}Теперь всё согласовано:
• debug-сборка → логирование и проверки есть
• release (
-DNDEBUG) → код полностью вырезается компиляторомТочно так же стоит писать и свои отладочные макросы:
#ifndef NDEBUG
#define DBG_LOG(msg) std::cerr << msg << "\n"
#else
#define DBG_LOG(msg) ((void)0)
#endif
NDEBUG — это не мелочь, а дисциплина сборки: отладочный код никогда не попадёт в релиз случайно, и всё поведение будет согласовано со стандартными механизмами C++.Please open Telegram to view this post
VIEW IN TELEGRAM
❤15👍11🔥5🤝1
This media is not supported in your browser
VIEW IN TELEGRAM
⚡ Kali LInux — авторский канал, который научит тебя хакингу и защите информации с нуля.
📚 Linux Books - мы создали канал с книгами по Linux и залили туда наверное самую большую подборку книг.. Около 320 книг бесплатно.
🔝 Здесь мы собрали целую кладезь полезных Linux ресурсов для прокачки
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16🤝8❤4👍2
На картинке — компактная шпаргалка по скобкам в Bash:
(), {}, $(), [], [[ ]] — что они делают и чем отличаются (подстановка команд, группировка в текущем shell/подоболочке, массивы, brace expansion, параметрическое расширение, арифметика и проверки условий).Сохрани, чтобы не путаться в синтаксисе и быстрее писать скрипты!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍6🔥6
Ищу 10 человек, чтобы собирали чат-ботов по шаблону, как пазлы.
ЗП: от 5-9000₽ за вечер.
Занятость: 3-4 часа в день.
Опыт: не нужен.
Как мы работаем:
1. Ты проходишь обучение пару недель;
2. Берёшь реальный проект из моей базы;
3. Собираешь бота по проверенной формуле;
4. Наставник контролирует процесс;
5. Получаешь деньги и закрепляешь клиента.
Весь процесс занимает до 2х недель с нуля до первых денег на твою карту.
Даниил из Балашихи был военнослужащим — с июля 2024 года начал создавать чат-ботов для бизнеса и уже заработал 4 млн. рублей. А главное теперь у него больше свободного времени на семью, друзей и развлечения.
Да, ты не первый. 103 человека уже ведут постоянных клиентов по моей формуле. Ведь сайт со статистикой Wordstat показывает 10 786 запросов за месяц в поисковике от бизнеса на эту услугу.
Заказов валом. Срочно нужны твои руки и голова.
Чтобы быстро разобраться во всех нюансах — запускай бота
Там пошаговый план как стартануть и гайд по клиентам.
8 мест ещё свободно
ЗП: от 5-9000₽ за вечер.
Занятость: 3-4 часа в день.
Опыт: не нужен.
Как мы работаем:
1. Ты проходишь обучение пару недель;
2. Берёшь реальный проект из моей базы;
3. Собираешь бота по проверенной формуле;
4. Наставник контролирует процесс;
5. Получаешь деньги и закрепляешь клиента.
Весь процесс занимает до 2х недель с нуля до первых денег на твою карту.
Даниил из Балашихи был военнослужащим — с июля 2024 года начал создавать чат-ботов для бизнеса и уже заработал 4 млн. рублей. А главное теперь у него больше свободного времени на семью, друзей и развлечения.
Да, ты не первый. 103 человека уже ведут постоянных клиентов по моей формуле. Ведь сайт со статистикой Wordstat показывает 10 786 запросов за месяц в поисковике от бизнеса на эту услугу.
Заказов валом. Срочно нужны твои руки и голова.
Чтобы быстро разобраться во всех нюансах — запускай бота
Там пошаговый план как стартануть и гайд по клиентам.
8 мест ещё свободно
👎9