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
👩‍💻 Когда результат может отсутствовать честно?

Иногда функция ничего не находит, но вынуждена возвращать ноль или пустую строку; удобно дать этому состоянию отдельное, явно оформленное место.

В этом гайде:

Как аккуратно выражать отсутствие результата в коде;

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

Научимся читать вызовы функций, не догадываясь по комментариям


Честно обозначенное «нет значения» делает интерфейсы проще, а ошибки поиска заметнее и предсказуемее.

📣 C++ Ready | #гайд
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1410🤝5👍4
Как перестать писать громоздкие циклы с индексами?

Классический вариант в C++ всё ещё часто выглядит так:
for (std::size_t i = 0; i < names.size(); ++i) {
std::cout << names[i] << '\n';
}


Здесь куча лишнего шума: тип индекса, i < names.size(), доступ по names[i].
Легко ошибиться с границами (<= вместо <) или забыть обновить цикл, если контейнер поменялся.

С range-based for всё короче и безопаснее:
for (const auto& name : names) {
std::cout << name << '\n';
}


Перебираем сразу элементы, а не индексы.
Тот же приём работает для std::vector, std::array, std::list, std::map и собственных контейнеров с begin()/end().

🔥 Используйте range-based for по умолчанию, а циклы с индексом оставляйте только там, где действительно нужен номер элемента.

📣 C++ Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
🤝137🔥5👍2
👩‍💻 Очередь, которая сама выбирает следующую задачу!

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

В этом разборе:

Посмотрим, как упорядочить дела так, чтобы важные всплывали первыми;

Почувствуем, как код берёт на себя рутину выбора;

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


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

📣 C++ Ready | #задача
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👍85🤝4
12🔥7🤝5👍1👎1
Типобезопасные перечисления — enum class вместо старого enum!

Обычный enum неявно приводится к int и даёт сравнивать разные перечисления друг с другом — легко наделать странных багов.

Сначала посмотрим на «старый» enum и его проблемы:
enum Color { Red, Green, Blue };
enum Status { Ok, Error };

int main() {
Color c = Red;

if (c == Ok) { } // компилируется, хотя Color и Status — разные enum'ы
}


Теперь перепишем на enum class, чтобы каждое перечисление стало отдельным типом с собственной областью имён:
enum class Color { Red, Green, Blue };
enum class Status { Ok, Error };

int main() {
Color c = Color::Red;
Status s = Status::Ok;

// if (c == s) { } // ошибка компиляции: разные типы
}


enum class не приводится к int по умолчанию, не пересекается по именам и сразу показывает, к какому именно набору значений относится переменная.

🔥 Переход на enum class — простой шаг к более безопасному и читаемому коду с перечислениями.

📣 C++ Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍129🔥4😁1
Что же выведет консоль?
Anonymous Quiz
13%
A
9%
B
71%
C
8%
D
12👍6🔥5
👩‍💻 Потоки, которые умеют останавливаться!

В этой шпаргалке — знакомство со 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