Создавай параллельные потоки и управляй их завершением через join() или detach(). Это повышает производительность, но важно контролировать жизненный цикл потоков, чтобы избежать ошибок и утечек ресурсов.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18🤝9❤6👍4
Простой мини-логгер на std::format!
Хотите простой и лёгкий логгер с уровнями и метками времени без внешних библиотек?
Подключаем заголовки:
Определяем уровни и функцию вывода:
Используем в
🔥 Мини-логгер на чистом стандарте обеспечивает гибкие уровни и метки времени без лишних зависимостей.
📣 C++ Ready | #практика
Хотите простой и лёгкий логгер с уровнями и метками времени без внешних библиотек?
Подключаем заголовки:
#include <iostream>
#include <chrono>
#include <format>
#include <string_view>
Определяем уровни и функцию вывода:
enum class Level { INFO, WARN, ERROR };
void log(Level lvl, std::string_view msg) {
auto now = std::chrono::system_clock::now();
auto ts = std::format("{:%H:%M:%S}", now);
std::print("[{}][{}] {}\n",
ts,
lvl==Level::INFO ? "I" : lvl==Level::WARN ? "W" : "E",
msg);
}Используем в
main() для разных уровней:int main() {
log(Level::INFO, "Приложение запущено");
log(Level::WARN, "Память близка к лимиту");
log(Level::ERROR, "Ошибка при инициализации");
return 0;
}🔥 Мини-логгер на чистом стандарте обеспечивает гибкие уровни и метки времени без лишних зависимостей.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18❤8👍5😁1
Как избежать скрытых багов из-за неявных конверсий enum?
Классические перечисления ведут себя как обычные
Передать
🔥 Используйте
📣 C++ Ready | #совет
enum class решает проблему одним движением: каждое перечисление становится полноценным типом.Классические перечисления ведут себя как обычные
int и легко «скрещиваются» друг с другом:enum Status { Ok, Error };
enum Color { Red, Green };
set_status(Red); // компилируется без варнингов!Передать
Color вместо Status больше не получится — компилятор остановит сборку (см. код на картинке).enum class по умолчанию; к старым enum возвращайтесь лишь ради legacy-кода.Please open Telegram to view this post
VIEW IN TELEGRAM
❤20👍7🔥5😁2
— Ты уволен
— Почему?
— Мы оплатили GPT-5, ты больше не нужен.
Вы тоже в ах@е с такого расклада? Учился лет 5, потом столько же батрачил за копейки ради опыта — чтобы тебя заменила еб@чая железяка.
А теперь задумайтесь: нейронки развиваются с бешеной скоростью. Поэтому сейчас как никогда нужны спецы для их обучения.
Чтобы в кратчайшие сроки выйти на уровень элиты и стать топом в сфере — подпишитесь на канал @devsp. Его автор раскрывает неочевидные секреты: как в 3 месяца уместить 6 лет обучения, достойно пройти любое собеседование и что делать, чтобы лучшие компании дрались за вас.
А временами подкидывает крутые вакансии и лайфхаки, после которых вас с руками оторвут даже без опыта.
Это всё равно что встретить Нео и войти в 10% тех, кто сломал систему. Подписывайтесь: @devsp
— Почему?
— Мы оплатили GPT-5, ты больше не нужен.
Вы тоже в ах@е с такого расклада? Учился лет 5, потом столько же батрачил за копейки ради опыта — чтобы тебя заменила еб@чая железяка.
А теперь задумайтесь: нейронки развиваются с бешеной скоростью. Поэтому сейчас как никогда нужны спецы для их обучения.
Чтобы в кратчайшие сроки выйти на уровень элиты и стать топом в сфере — подпишитесь на канал @devsp. Его автор раскрывает неочевидные секреты: как в 3 месяца уместить 6 лет обучения, достойно пройти любое собеседование и что делать, чтобы лучшие компании дрались за вас.
А временами подкидывает крутые вакансии и лайфхаки, после которых вас с руками оторвут даже без опыта.
Это всё равно что встретить Нео и войти в 10% тех, кто сломал систему. Подписывайтесь: @devsp
👎25😁4
Один небольшой кусок логики решает, кто в списке окажется впереди, а кто уйдёт вниз, превращая сортировку в понятные читаемые правила.
В этом гайде:
• Разберём, как описывать порядок элементов простыми условиями;
• Покажем, как добавить второй признак сравнения без шума;
• Научимся быстро менять логику сортировки под разные задачи
Освоив такие приёмы, вы перестанете бояться сложных списков и будете управлять ими уверенно каждый день.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12❤5👍5🤝4
Подсказки компилятору — атрибуты [[likely]] и [[unlikely]] в C++20
В современном C++ важно не только *что* делает код, но и *как часто* выполняются разные ветки. Атрибуты
С C++20 можно писать так:
Здесь мы явно говорим компилятору: позитивные значения — норма, отрицательные — редкость. Внутри
Атрибуты также работают в
Здесь
🔥 Такие подсказки не гарантируют ускорения, но помогают компилятору лучше оптимизировать горячие участки и делают намерения разработчика явными прямо в коде.
📣 C++ Ready | #практика
В современном C++ важно не только *что* делает код, но и *как часто* выполняются разные ветки. Атрибуты
[[likely]] и [[unlikely]] помогают подсказать компилятору, какие условия встречаются чаще — это может улучшить branch prediction и чуть ускорить критичные участки.С C++20 можно писать так:
int classify(int x) {
if (x >= 0) [[likely]] {
return 1; // «обычный» путь
} else [[unlikely]] {
return -1; // редкий случай
}
}
int main() {
std::cout << classify(10) << "\n"; // чаще
std::cout << classify(-5) << "\n"; // реже
}Здесь мы явно говорим компилятору: позитивные значения — норма, отрицательные — редкость. Внутри
if это выглядит аккуратно, без лишних макросов и #ifdef.Атрибуты также работают в
switch:const char* to_string_error(int code) {
switch (code) {
case 0:
[[likely]];
return "OK";
case 1:
return "Network error";
default:
[[unlikely]];
return "Unknown error";
}
}Здесь
case 0 — самый вероятный путь, а default помечен как маловероятный, но важный для диагностики.Please open Telegram to view this post
VIEW IN TELEGRAM