Простой мини-логгер на 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
🔥20❤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
❤23👍8🔥5😁2
Один небольшой кусок логики решает, кто в списке окажется впереди, а кто уйдёт вниз, превращая сортировку в понятные читаемые правила.
В этом гайде:
• Разберём, как описывать порядок элементов простыми условиями;
• Покажем, как добавить второй признак сравнения без шума;
• Научимся быстро менять логику сортировки под разные задачи
Освоив такие приёмы, вы перестанете бояться сложных списков и будете управлять ими уверенно каждый день.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16🤝9❤5👍5
Подсказки компилятору — атрибуты [[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
❤16🔥12👍7🤝1
Показываем числа всего на несколько секунд, стираем экран и спрашиваем одно из них, превращая обычный запуск программы в маленький тренажёр памяти.
В этой задаче:
• Соберёшь короткую игру, которая проверяет внимательность и память;
• Почувствуешь, как несколько секунд ожидания создают лёгкое напряжение;
• Увидишь, как привычное окно превращается в маленький полигон.
А если добавить несколько раундов, игра постепенно становится привычным вечерним зарядом для мозга на каждый день.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥25❤12🤝6
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥26🤝15👍10❤4