Telegram Web
➡️ Магия счётчиков

Думаю каждый встречался с циклами. Так вот. Там есть интересная особенность — нужно объявлять счетчик. Это дико бесит начинающих программистов, так что предлагаю такую конструкцию:

int i = 0;
for(i=0; i < n; i++) { //учимся считать }

• Заменять на такую:

for(int i = 0; i < n; i++) { //учимся считать }

• Это удобнее и красивее

(https://www.tgoop.com/Learning_pluses) 👩‍💻

@quizcpp
4 типовые ловушки в работе со строками в С и С++ и как их избежать

Смотреть статью ()

(https://www.tgoop.com/Learning_pluses) 👩‍💻

@quizcpp

https://habr.com/ru/companies/ncloudtech/articles/830918/
Какой результат даст выражение CharTable {}.is_printable(0x81) на x86?
struct CharTable {
  static_assert(CHAR_BIT == 8);
  std::array<bool, 256> _is_printable {};
  CharTable() {
    _is_printable.fill(true);
    _is_printable[0x81] = false;
  }
  bool is_printable(char c) const {
    return this->_is_printable[c];
  }
};

Зависит от платформы и знаковости char! На ARM этот код работает корректно. Там char беззнаковый.

На x86 в коде будет неопределённое поведение. Знаковый char 0x81 (-127) при передаче в std::array<T, N>::operator[](size_t) становится большим беззнаковым числом, которое больше размера массива. Мы получаем выход за границу массива и все вытекающие из этого проблемы. С очень большой вероятностью вызов упадёт с ошибкой сегментации.

https://godbolt.org/z/Wzzbdj1d9

Задачка из квиза по неопределённому поведению Дмитрия Свиридкина, опубликована на сайте PVS-Studio.
➡️ Магия byte

Не многие знаю что существует тип переменной byte. Число этого типа может быть в диапазоне от 0 до 255.

👀 А теперь посмотрите насколько это удобно использовать для хранения значений аналоговых входов Просто идеально… Главное в минус не загоняйте число)

🗣 А, и занимает это чудо в 2 раза меньше памяти. За такое вас по головке поглядят.

👩‍💻

@quizcpp
➡️ Вложенные макросы

Используйте вложенные макросы везде. Это хороший способ сократить код.

• Макрос LOG: Выводит сообщение в консоль.
• Макрос ADD: Складывает два числа.
• Макрос ADD_AND_LOG: Сложение двух чисел и вывод результата в консоль с использованием вложенных макросов.

👩‍💻

@quizcpp
➡️ Использование алиасов для длинных типов

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

• Например:
typedef std::vector StrVector;
👩‍💻

@quizcpp
➡️ Использование RAII для Управления Ресурсами в C++

RAII (Resource Acquisition Is Initialization) — это идиома в C++, которая обеспечивает автоматическое управление ресурсами. Она гарантирует, что ресурсы будут освобождены, когда объект, владеющий ими, выходит из области видимости.

Класс FileWrapper:

• Конструктор открывает файл и выбрасывает исключение, если файл не может быть открыт.
• Деструктор гарантирует, что файл будет закрыт при выходе объекта из области видимости, даже если произошло исключение.

Метод write:

• Проверяет, открыт ли файл, и записывает сообщение в файл, если файл открыт.

Использование в main:

• Объект FileWrapper создается в блоке try, и файл автоматически закрывается, когда объект выходит из области видимости.
• Исключения обрабатываются в блоке catch, выводя сообщение об ошибке.

(https://www.tgoop.com/Learning_pluses) 👩‍💻

@quizcpp
audioFlux

audioFlux — это библиотека C++ с открытым исходным кодом для работы со звуком. Она предоставляет простой и удобный интерфейс для выполнения различных задач, связанных с обработкой аудио.

(https://www.tgoop.com/Learning_pluses) 👩‍💻

@quizcpp
➡️ Обнаружение утечек памяти с использованием нестандартного оператора new в C++

В C++ утечки памяти могут стать серьезной проблемой, особенно в больших проектах. Один из способов обнаружения утечек памяти — переопределение оператора new, чтобы отслеживать выделение и освобождение памяти.

• Мы переопределяем оператор new, чтобы отслеживать все выделения памяти, сохраняя указатели и размеры выделенных блоков в std::map.

• Переопределение оператора delete позволяет отслеживать освобождение памяти. Когда память освобождается, соответствующая запись удаляется из allocations.

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

(https://www.tgoop.com/Learning_pluses) 👩‍💻

@quizcpp
➡️ Ленивая инициализация статического объекта с использованием std::call_once

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

🗣️ Для этого можно использовать std::call_once.

(https://www.tgoop.com/Learning_pluses) 👩‍💻

@quizcpp
➡️ Оптимизация использования памяти с помощью std::string_view

std::string_view — это новый тип в C++17, который позволяет работать со строками без их копирования.

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

(https://www.tgoop.com/Learning_pluses) 👩‍💻

@quizcpp
➡️ Локальные анонимные функции с использованием std::function и std::bind

В C++ можно использовать анонимные функции (лямбда-функции) не только для однократных вызовов, но и для создания сложных цепочек вызовов или отложенного выполнения.

• С помощью std::function и std::bind можно создавать гибкие и мощные конструкции.

• std::bind позволяет создавать новые функции с фиксированными значениями для некоторых аргументов. В примере выше создается функция addFive, которая всегда добавляет 5 к переданному ей значению.

(https://www.tgoop.com/Learning_pluses) 👩‍💻

@quizcpp
🙌🙌🙌🙌 15+ документов для тех, кто в диджитал

В преддверии новой активности мы собрали в одну папку 18 Telegram-каналов известных профессионалов и попросили их авторов подготовить для вас документы, которые помогут:

🔴Создать рабочий лид-магнит;
🔴Подготовить сайт к требованиям РКН;
🔴Подготовиться к любому выступлению;
🔴Удержать проект в сроках и рамках бюджета;
🔴Организовать эффективное участие в тендерах;
🔴Чек-лист сдачи этапов разработки;
🔴и еще много много всего!

❗️ Сохранив единожды папку «Документы для тех, кто в диджитал», вы сможете спокойно пройтись по всем каналам и скачать множество авторских документов, которые точно пригодятся в работе.
Please open Telegram to view this post
VIEW IN TELEGRAM
➡️ Библиотека TOML11

TOML11 — это библиотека для парсинга и сериализации конфигурационных файлов в формате TOML (Tom's Obvious, Minimal Language) на C++. Она поддерживает полное соответствие спецификации TOML и позволяет легко работать с конфигурационными файлами, делая их удобными для человека и машины.

• Если вы ищете простой и эффективный способ работы с конфигурациями в формате TOML в C++, TOML11 — отличный выбор.

🔗 Ссылочка на доку (https://github.com/ToruNiina/toml11)

(https://www.tgoop.com/Learning_pluses) 👩‍💻

@quizcpp
➡️ Разделители разрядов чисел

• Раньше вам нужно было считать цифры или нули, но, начиная с C++14, вы можете сделать большие числа намного нагляднее.

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

• Благодаря сгруппированным разрядам, ваш код станет немного выразительнее.

(https://www.tgoop.com/Learning_pluses) 👩‍💻

@quizcpp
Привет, на связи админ.

Многие из вас слышали про VEO3 нейронку, которая очень качественно генерит видосы. Я ее встроил в бота, () можете затестить(самые низкие цены на рынке, ниже не найдете нигде veo3 ()

@quizcpp

https://www.tgoop.com/Veo3_official_bot?start=myit
LibSourcey

LibSourcey — это набор кроссплатформенных модулей и классов C++14, предоставляющий разработчикам инструменты для быстрого создания высокопроизводительных сетевых приложений на основе p2p и потокового мультимедиа.

Библиотека позиционирует себя как высокопроизводительное решение, объединяющее в себе функциональность libuv, FFmpeg, OpenCV и WebRTC.

(https://www.tgoop.com/Learning_pluses) 👩‍💻

@quizcpp
➡️ Библиотека Cereal — сериализация данных в C++

Cereal — это библиотека для сериализации данных в C++, которая поддерживает как текстовые, так и бинарные форматы. Она проста в использовании, но при этом гибка, предоставляя возможность легко сохранять и загружать сложные объекты и структуры данных.

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

🔗 Ссылочка на доку (https://uscilab.github.io/cereal/)

(https://www.tgoop.com/Learning_pluses) 👩‍💻

@quizcpp
➡️ Библиотека SOCI — удобная работа с базами данных в C++

SOCI (The C++ Database Access Library) — это библиотека, которая упрощает взаимодействие с различными базами данных, такими как PostgreSQL, MySQL, SQLite, и Oracle. Она предоставляет интерфейс, похожий на SQL, и позволяет работать с базами данных, используя простые и понятные C++-конструкции.

• SOCI — отличный выбор для разработчиков, которым нужно легко интегрировать базы данных в C++ проекты, не жертвуя производительностью и удобством.

🔗 Ссылочка на доку (https://github.com/SOCI/soci)

(https://www.tgoop.com/Learning_pluses) 👩‍💻

@quizcpp
2025/06/25 23:24:37
Back to Top
HTML Embed Code: