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

Автор: @energy_it

РКН: https://clck.ru/3QREHc

Реклама на бирже: https://telega.in/c/cpp_ready
Download Telegram
👩‍💻 Потоки, которые умеют останавливаться!

В этой шпаргалке — знакомство со std::jthread как с “умным” потоком: он автоматически дожидается завершения задачи при выходе из области видимости и тесно связан со std::stop_token.

📣 C++ Ready | #шпора
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥24👍75🤝1
Как запретить опасное копирование ещё на этапе компиляции?

Класс часто владеет ресурсом: файл, сокет, мьютекс.
Если такой объект случайно скопировать, ресурс могут закрыть дважды или использовать после освобождения — ловим странные баги.

В современном C++ не нужно придумывать трюки с приватными конструкторами.
Достаточно явно запретить операции через = delete:
struct File {
File(const std::string& path);

File(const File&) = delete;
File& operator=(const File&) = delete;
};


Теперь любой код, который останавливается ещё на стадии сборки, например:
File a{"data.txt"};
File b = a; // не скомпилируется


Тем же приёмом можно отключать нежелательные перегрузки функций:
void print(double);
void print(int) = delete; // запретить неявное приведение int → double


🔥 Итог: = delete — простой способ сказать компилятору
«эту операцию делать нельзя», и превратить потенциальный рантайм-баг в понятную ошибку компиляции.

📣 C++ Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
16🔥8🤝6👍1
Программисты, это вам 👇

Держите 5 каналов, которые реально помогают изучать программирование и IT с полного нуля:

🖥 Easy Coder — все направления IT.

👩‍💻 Easy Python — всё о Python.

🌐 Easy WebDev — Frontend, Backend.

🔠 Easy InfoSec — ИБ, Хакинг.

🐱 Easy GitHub — лучшее с GitHub.

Тонны полезной инфы для любого уровня подготовки ✔️
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍1🔥1
👩‍💻 Небольшой пул потоков для параллельных коротких задач!

Запускаем несколько рабочих потоков заранее, кладём задачи в общую очередь — потоки по сигналу забирают и выполняют их, без создания новых std::thread на каждую задачу.

В этой задаче:

Почувствуешь разницу между хаотичным запуском задач и порядком;

Увидишь, как несколько потоков спокойно делят очередь;

Замечаешь, как код берёт рутину выбора на себя.


Покажет использование в main и почему порядок вывода «плавает». Добавление std::future сделает пул ещё удобнее.

📣 C++ Ready | #задача
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18👍96🤝1
41😁20🔥15👎6
Безопасный union — std::variant и std::visit!

Обычный union в C++ легко приводит к UB: нужно самому следить, какой тип там сейчас хранится. std::variant из стандарта делает то же самое, но безопасно: внутри хранится ровно один из перечисленных типов и следит за активным вариантом.

Сначала объявим удобный псевдоним для значения, которое может быть int, double или std::string:
using Value = std::variant<int, double, std::string>;


Теперь напишем функцию-обработчик, которая по-разному реагирует на каждый возможный тип внутри Value с помощью std::visit:
void handle(const Value& v) {
std::visit([](const auto& x) {
using T = std::decay_t<decltype(x)>;

if constexpr (std::is_same_v<T, int>) {
std::cout << "int: " << x << "\n";
} else if constexpr (std::is_same_v<T, double>) {
std::cout << "double: " << x << "\n";
} else {
std::cout << "string: " << x << "\n";
}
}, v);
}


И маленький пример использования: одно и то же значение по очереди становится разными типами, а std::visit всегда вызывается с актуальным вариантом:
int main() {
Value v = 42;
handle(v); // int: 42

v = 3.14;
handle(v); // double: 3.14

v = std::string("hello");
handle(v); // string: hello

return 0;
}


🔥 std::variant + std::visit дают безопасный, типобезопасный union и аккуратную обработку нескольких типов без кастов и ручного трекинга «какой тип лежит внутри».

📣 C++ Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍64👎3🤝1
This media is not supported in your browser
VIEW IN TELEGRAM
Джуны в IT никому не нужны! А знаешь почему?

Новички отправляют 100 резюме, ходят на собеседования, сверкают знаниями, но постоянно слышат «нужен опыт»! Хотя это огромная ЛОЖЬ!

Работодателю плевать, сколько лет в трудовой написано. Ему нужен человек, который может:

разобраться в тех.задании от людей, которые ничего не понимают в IT
уметь вести переговоры с заказчиком по техническим вопросам
донести потребности клиента до программистов и РЕШИТЬ ЗАДАЧУ!

Тот, кто понимает разницу между теорией и практикой, качает нужные скиллы, тот получает офферы 180-200к. Даже без опыта в IT. Потому что они с первых фраз показывают свою компетентность, а не теорию.

🔎 На канале Старт карьеры IT | System Analyst вы найдете всё необходимое, чтобы получить хороший оффер, а не очередное «приходите, когда наберетесь опыта»!

НАЧНИТЕ ЗДЕСЬ: @start_IT_Olepo
👎81
👩‍💻 Строки, которые форматируются как надо!

Когда вывод разбросан по cout и printf, его трудно менять; удобнее собрать текст по шаблону и лишь подставлять нужные значения.

В этом гайде:

Посмотрим, как собирать аккуратный текст из значений;

Разберём примеры выравнивания и красивых табличных чисел;

Сделаем простой и понятный лог без склейки строк.


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

📣 C++ Ready | #гайд
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
10🔥8🤝8👍1