C/C++ Ready | Программирование
14.4K subscribers
1.01K photos
51 videos
437 links
Авторский канал по разработке на C и C++.
Ресурсы, гайды, задачи, шпаргалки.
Информация ежедневно пополняется!

Автор: @energy_it

Заявление в РКН: № 6382873737

Реклама на бирже: https://telega.in/c/cpp_ready
Download Telegram
👩‍💻 Командный старт-финиш!

Овладей std::barrier и забудь о рыхлых точках синхронизации: пусть потоки аккуратно приходят к контрольной черте, запускают единый callback и дружно рвутся в следующий раунд — без гонок, пропусков и лишних ожиданий.

📣 C++ Ready | #шпора
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥296👍4🤝1
Проверки на этапе компиляции — static_assert!

С C++11 можно валидировать условия ещё на этапе компиляции — до запуска программы. Если static_assert не выполняется, компилятор выдаст понятное сообщение об ошибке.

Подключаем заголовок с трейтом типов для последующих проверок:
#include <type_traits>


Простейшая проверка: убеждаемся, что int занимает хотя бы 4 байта в целевой системе:
static_assert(sizeof(int) >= 4, "int должен быть не менее 4 байт");


В шаблонах static_assert помогает выдавать информативные ошибки: при попытке check_float<int>() компиляция не пройдёт:
template<typename T>
void check_float() {
static_assert(std::is_floating_point_v<T>, "T должен быть плавающим типом");
}

int main() {
check_float<double>(); // OK
// check_float<int>(); // приведёт к ошибке: "T должен быть плавающим типом"
}


🔥 Это ваш первый фильтр ошибок, ловите некорректные условия сразу при сборке!

📣 C++ Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥198👍3
👩‍💻 Мини-CLI для удобного просмотра последних git-коммитов!

Утилита на C++ с помощью libgit2 выводит N последних коммитов вместе с автором, временем и кратким сообщением в понятном консольном формате.

В этой CLI-утилите:

Помогает быстро просматривать историю важных изменений проекта;

Упрощает командную строку и избавляет от лишних действий;

Позволяет всегда видеть автора и время каждого коммита.


Этот инструмент станет отличным дополнением к рабочему процессу C++ проектов и ускорит анализ изменений.

📣 C++ Ready | #задача
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👍54🤝1
🤨 Многие об этом не знают и почти не используют!

Чтобы нельзя было «случайно проигнорировать» важный результат, пометьте функцию атрибутом [[nodiscard]]. Компилятор предупредит, если возвращаемое значение не используют.

Пример: parse_num() возвращает std::optional<int> с [[nodiscard]]. Вызов без проверки (parse_num("xx");) — сразу ворнинг, а корректный путь — через if (auto n = ... ).

🔥 Ловит «забыл проверить» ещё на этапе сборки и отлично сочетается с std::optional/std::expected.

📣 C++ Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21👍85
👩‍💻 Синхронная итерация и батчи без лишних копий!

В этой шпаргалке — знакомство с zip_view и chunk_view: как пробегать сразу по нескольким диапазонам, получая кортежи из элементов разных контейнеров, и разбивать длинные последовательности на удобные порции для пакетной обработки.

📣 C++ Ready | #шпора
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥184👍4
Лайфхак для сверхбыстрого сплита строк!

Задумывались, как разделить строку на части молниеносно и без лишних затрат памяти? Покажем, как сделать это по-настоящему элегантно.

В начале — универсальная функция обработки токенов: она обходит строку, выдаёт каждый фрагмент и НЕ создаёт временных копий.
template<class F>
void for_each_token(std::string_view s, char delim, F f) {
while (true) {
size_t pos = s.find(delim);
std::string_view token = s.substr(0, pos);
f(token);
if (pos == std::string_view::npos) break;
s.remove_prefix(pos + 1);
}
}


Теперь легко разбираем пары ключ=значение, работая прямо с исходной строкой.
std::string data = "id=42;name=anna;city=Helsinki";
for_each_token(data, ';', [](std::string_view kv) {
size_t eq = kv.find('=');
auto key = kv.substr(0, eq);
auto val = (eq == std::string_view::npos)
? std::string_view{}
: kv.substr(eq + 1);
// здесь обрабатываем key и val
});


А чтобы посчитать числа без аллокаций и зависимостей от локали, используем std::from_chars прямо внутри цикла.
int total = 0;
for_each_token("10,,20,30", ',', [&](std::string_view t) {
if (t.empty()) return;
int x;
auto res = std::from_chars(t.data(), t.data() + t.size(), x);
if (res.ec == std::errc()) total += x;
});


🔥 Главное: манипулируйте std::string_view и обрабатывайте данные на лету — никакой работы с копиями и выхлопом из аллокатора!

📣 C++ Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥64
👩‍💻 Когда запуск задачи важнее самой задачи?

Сегодня разбираем, почему момент старта работы меняет поведение программы и впечатление пользователя, и как осознанный выбор режима сохраняет время и нервы.

В этом гайде:

Когда начинать работу, чтобы отклик был быстрее;

Экономим ресурсы, не делая лишних действий заранее;

Как проверять поведение, не вмешиваясь в процесс.


Запускайте работу вовремя, объясняйте выбор просто, показывайте выгоду, убирайте лишний шум постоянно.

📣 C++ Ready | #гайд
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥199👍7🤝2