➡️ Библиотека str_format и absl::StrFormat()
• Это эффективная, типобезопасная и расширяемая библиотека, поддерживающая весь синтаксис форматирования printf. Почти все преобразования printf можно легко обновить до absl::StrFormat().
• Библиотека str_format позволяет использовать форматирование printf в C++ с типовой безопасностью и расширяемостью, обеспечивая удобное форматирование строк.
🔗 Ссылочка на доку (https://abseil.io/docs/cpp/guides/format)
C++ Learning (https://t.me/Learning_pluses) 👩💻
• Это эффективная, типобезопасная и расширяемая библиотека, поддерживающая весь синтаксис форматирования printf. Почти все преобразования printf можно легко обновить до absl::StrFormat().
• Библиотека str_format позволяет использовать форматирование printf в C++ с типовой безопасностью и расширяемостью, обеспечивая удобное форматирование строк.
🔗 Ссылочка на доку (https://abseil.io/docs/cpp/guides/format)
C++ Learning (https://t.me/Learning_pluses) 👩💻
➡️ Infinity Loop
У некоторых людей есть боязнь использования бесконечных/полубесконечных циклов (это связано с тем, что они не любят неопределенность).
• На самом деле это очень полезная вещь, когда нужно «подождать пока что-то не случится»
while(digitalRead(button) ≠ LOW) { ; }
• Этот код ждет, пока кнопка (пин button) не отпустится. Это очень полезная фишка, которую можно использовать для ожидания какого-либо события.
C++ Learning (https://t.me/Learning_pluses) 👩💻
У некоторых людей есть боязнь использования бесконечных/полубесконечных циклов (это связано с тем, что они не любят неопределенность).
• На самом деле это очень полезная вещь, когда нужно «подождать пока что-то не случится»
while(digitalRead(button) ≠ LOW) { ; }
• Этот код ждет, пока кнопка (пин button) не отпустится. Это очень полезная фишка, которую можно использовать для ожидания какого-либо события.
C++ Learning (https://t.me/Learning_pluses) 👩💻
➡️ Магия счётчиков
Думаю каждый встречался с циклами. Так вот. Там есть интересная особенность — нужно объявлять счетчик. Это дико бесит начинающих программистов, так что предлагаю такую конструкцию:
int i = 0;
for(i=0; i < n; i++) { //учимся считать }
• Заменять на такую:
for(int i = 0; i < n; i++) { //учимся считать }
• Это удобнее и красивее
👩💻
Думаю каждый встречался с циклами. Так вот. Там есть интересная особенность — нужно объявлять счетчик. Это дико бесит начинающих программистов, так что предлагаю такую конструкцию:
int i = 0;
for(i=0; i < n; i++) { //учимся считать }
• Заменять на такую:
for(int i = 0; i < n; i++) { //учимся считать }
• Это удобнее и красивее
👩💻
😈1
➡️ Магия byte
Не многие знаю что существует тип переменной byte. Число этого типа может быть в диапазоне от 0 до 255.
👀 А теперь посмотрите насколько это удобно использовать для хранения значений аналоговых входов Просто идеально… Главное в минус не загоняйте число)
🗣 А, и занимает это чудо в 2 раза меньше памяти. За такое вас по головке поглядят.
👩💻
Не многие знаю что существует тип переменной byte. Число этого типа может быть в диапазоне от 0 до 255.
👀 А теперь посмотрите насколько это удобно использовать для хранения значений аналоговых входов Просто идеально… Главное в минус не загоняйте число)
🗣 А, и занимает это чудо в 2 раза меньше памяти. За такое вас по головке поглядят.
👩💻
➡️ Использование алиасов для длинных типов
Это позволяет значительно упростить код, сделать его более читаемым и легким для поддержки.
• Например:
typedef std::vector StrVector;
C++ Learning (https://t.me/Learning_pluses) 👩💻
Это позволяет значительно упростить код, сделать его более читаемым и легким для поддержки.
• Например:
typedef std::vector StrVector;
C++ Learning (https://t.me/Learning_pluses) 👩💻
Реализуем эффективный тупль с помощью C++26
https://habr.com/ru/articles/835176/
https://habr.com/ru/articles/835176/
Хабр
Реализуем эффективный тупль с помощью C++26
Свет видел много любительских реализаций std::tuple , и реализация своих велосипедов — наверное, действительно действенный способ обучения: вряд-ли можно сказать, что ты что-то по-настоящему...
➡️ Использование RAII для Управления Ресурсами в C++
RAII (Resource Acquisition Is Initialization) — это идиома в C++, которая обеспечивает автоматическое управление ресурсами. Она гарантирует, что ресурсы будут освобождены, когда объект, владеющий ими, выходит из области видимости.
Класс FileWrapper:
• Конструктор открывает файл и выбрасывает исключение, если файл не может быть открыт.
• Деструктор гарантирует, что файл будет закрыт при выходе объекта из области видимости, даже если произошло исключение.
Метод write:
• Проверяет, открыт ли файл, и записывает сообщение в файл, если файл открыт.
Использование в main:
• Объект FileWrapper создается в блоке try, и файл автоматически закрывается, когда объект выходит из области видимости.
• Исключения обрабатываются в блоке catch, выводя сообщение об ошибке.
C++ Learning (https://t.me/Learning_pluses) 👩💻
RAII (Resource Acquisition Is Initialization) — это идиома в C++, которая обеспечивает автоматическое управление ресурсами. Она гарантирует, что ресурсы будут освобождены, когда объект, владеющий ими, выходит из области видимости.
Класс FileWrapper:
• Конструктор открывает файл и выбрасывает исключение, если файл не может быть открыт.
• Деструктор гарантирует, что файл будет закрыт при выходе объекта из области видимости, даже если произошло исключение.
Метод write:
• Проверяет, открыт ли файл, и записывает сообщение в файл, если файл открыт.
Использование в main:
• Объект FileWrapper создается в блоке try, и файл автоматически закрывается, когда объект выходит из области видимости.
• Исключения обрабатываются в блоке catch, выводя сообщение об ошибке.
C++ Learning (https://t.me/Learning_pluses) 👩💻
➡️ Управление памятью с использованием std::unique_ptr и пользовательских удалителей
Использование std::unique_ptr с пользовательскими удалителями позволяет автоматически управлять жизненным циклом объектов и безопасно освобождать ресурсы.
• Это может быть полезно для управления ресурсами, которые требуют специальной логики освобождения, таких как дескрипторы файлов или сетевые соединения.
C++ Learning (https://t.me/Learning_pluses) 👩💻
Использование std::unique_ptr с пользовательскими удалителями позволяет автоматически управлять жизненным циклом объектов и безопасно освобождать ресурсы.
• Это может быть полезно для управления ресурсами, которые требуют специальной логики освобождения, таких как дескрипторы файлов или сетевые соединения.
C++ Learning (https://t.me/Learning_pluses) 👩💻
«Range-based for»: что интересного лежит на поверхности
https://habr.com/ru/articles/835130/
https://habr.com/ru/articles/835130/
Хабр
«Range-based for»: что интересного лежит на поверхности
Новый синтаксис для циклов for в C++ появился уже давно - более десяти лет назад в стандарте C++11. Идея, скрывающаяся за этим синтаксисом, не является сколь-нибудь запутанной, и практически все, кто...
➡️ Обнаружение утечек памяти с использованием нестандартного оператора new в C++
В C++ утечки памяти могут стать серьезной проблемой, особенно в больших проектах. Один из способов обнаружения утечек памяти — переопределение оператора new, чтобы отслеживать выделение и освобождение памяти.
• Мы переопределяем оператор new, чтобы отслеживать все выделения памяти, сохраняя указатели и размеры выделенных блоков в std::map.
• Переопределение оператора delete позволяет отслеживать освобождение памяти. Когда память освобождается, соответствующая запись удаляется из allocations.
• В конце программы проверяется, остались ли неосвобожденные участки памяти, что позволяет обнаружить утечки.
C++ Learning (https://t.me/Learning_pluses) 👩💻
В C++ утечки памяти могут стать серьезной проблемой, особенно в больших проектах. Один из способов обнаружения утечек памяти — переопределение оператора new, чтобы отслеживать выделение и освобождение памяти.
• Мы переопределяем оператор new, чтобы отслеживать все выделения памяти, сохраняя указатели и размеры выделенных блоков в std::map.
• Переопределение оператора delete позволяет отслеживать освобождение памяти. Когда память освобождается, соответствующая запись удаляется из allocations.
• В конце программы проверяется, остались ли неосвобожденные участки памяти, что позволяет обнаружить утечки.
C++ Learning (https://t.me/Learning_pluses) 👩💻
➡️ Оператор decltype для создания зависимых типов в C++
В C++ оператор decltype позволяет определить тип переменной на основе типа другого выражения. Это особенно полезно в шаблонном программировании для создания зависимых типов, когда точный тип заранее неизвестен.
• Оператор decltype определяет тип sum на основе типа элементов, возвращаемых итератором контейнера. Это позволяет избежать жесткого кодирования типов и делает код более гибким.
• Использование decltype в шаблонных функциях позволяет писать более универсальный код, который корректно работает с различными типами контейнеров.
C++ Learning (https://t.me/Learning_pluses) 👩💻
В C++ оператор decltype позволяет определить тип переменной на основе типа другого выражения. Это особенно полезно в шаблонном программировании для создания зависимых типов, когда точный тип заранее неизвестен.
• Оператор decltype определяет тип sum на основе типа элементов, возвращаемых итератором контейнера. Это позволяет избежать жесткого кодирования типов и делает код более гибким.
• Использование decltype в шаблонных функциях позволяет писать более универсальный код, который корректно работает с различными типами контейнеров.
C++ Learning (https://t.me/Learning_pluses) 👩💻
👍2
➡️ Использование static_assert для компиляционных проверок
static_assert — это мощный инструмент в C++, который позволяет проверять условия на этапе компиляции.
• Он особенно полезен для проверки инвариантов, размеров типов или других свойств, которые должны быть выполнены перед компиляцией кода.
C++ Learning (https://t.me/Learning_pluses) 👩💻
static_assert — это мощный инструмент в C++, который позволяет проверять условия на этапе компиляции.
• Он особенно полезен для проверки инвариантов, размеров типов или других свойств, которые должны быть выполнены перед компиляцией кода.
C++ Learning (https://t.me/Learning_pluses) 👩💻
➡️ Использование std::launder для работы с переинициализированными объектами
В C++17 появился новый инструмент — std::launder, который решает проблему с доступом к объектам, которые были переинициализированы в той же области памяти.
• Это довольно специфичная и редко используемая функция, но она может оказаться крайне полезной в определенных ситуациях.
C++ Learning (https://t.me/Learning_pluses) 👩💻
В C++17 появился новый инструмент — std::launder, который решает проблему с доступом к объектам, которые были переинициализированы в той же области памяти.
• Это довольно специфичная и редко используемая функция, но она может оказаться крайне полезной в определенных ситуациях.
C++ Learning (https://t.me/Learning_pluses) 👩💻
Что значит инициализировать int в C++?
https://habr.com/ru/articles/835170/
https://habr.com/ru/articles/835170/
Хабр
Что значит инициализировать int в C++?
Недавно я получил по почте от Сэма Джонсона этот вопрос. Вот слегка отредактированное письмо Сэма: «Возьмём для примера этот код в локальной области видимости функции: int a; a = 5; Многие люди...
➡️ Управление ресурсами с помощью std::scoped_lock для нескольких мьютексов
В C++17 был представлен std::scoped_lock, который позволяет одновременно захватывать несколько мьютексов, гарантируя отсутствие взаимных блокировок (deadlocks).
• Этот класс позволяет безопасно и одновременно захватывать несколько мьютексов. В отличие от использования std::lock_guard, который захватывает один мьютекс, std::scoped_lock предотвращает взаимные блокировки, которые могут возникнуть при попытке захвата нескольких мьютексов в произвольном порядке.
• std::scoped_lock полезен в ситуациях, когда нужно гарантировать атомарность операций над несколькими разделяемыми ресурсами, минимизируя риск deadlock'ов.
• При выходе из области видимости, std::scoped_lock автоматически отпускает все захваченные мьютексы, обеспечивая безопасное управление ресурсами.
C++ Learning (https://t.me/Learning_pluses) 👩💻
В C++17 был представлен std::scoped_lock, который позволяет одновременно захватывать несколько мьютексов, гарантируя отсутствие взаимных блокировок (deadlocks).
• Этот класс позволяет безопасно и одновременно захватывать несколько мьютексов. В отличие от использования std::lock_guard, который захватывает один мьютекс, std::scoped_lock предотвращает взаимные блокировки, которые могут возникнуть при попытке захвата нескольких мьютексов в произвольном порядке.
• std::scoped_lock полезен в ситуациях, когда нужно гарантировать атомарность операций над несколькими разделяемыми ресурсами, минимизируя риск deadlock'ов.
• При выходе из области видимости, std::scoped_lock автоматически отпускает все захваченные мьютексы, обеспечивая безопасное управление ресурсами.
C++ Learning (https://t.me/Learning_pluses) 👩💻
➡️ Библиотека Boost.Hana
• Boost.Hana — это библиотека для метапрограммирования в C++, которая предоставляет мощные инструменты для работы с типами и компиляции вычислений. Она позволяет реализовывать сложные вычисления на этапе компиляции, используя функциональный стиль программирования.
• Boost.Hana особенно полезна, если вам нужно использовать метапрограммирование в C++ для создания сложных, но эффективных решений. Если вы хотите попробовать что-то новое в области метапрограммирования, обратите внимание на эту библиотеку.
🔗 Ссылочка на доку (https://www.boost.org/doc/libs/1_86_0/libs/hana/doc/html/index.html)
C++ Learning (https://t.me/Learning_pluses) 👩💻
• Boost.Hana — это библиотека для метапрограммирования в C++, которая предоставляет мощные инструменты для работы с типами и компиляции вычислений. Она позволяет реализовывать сложные вычисления на этапе компиляции, используя функциональный стиль программирования.
• Boost.Hana особенно полезна, если вам нужно использовать метапрограммирование в C++ для создания сложных, но эффективных решений. Если вы хотите попробовать что-то новое в области метапрограммирования, обратите внимание на эту библиотеку.
🔗 Ссылочка на доку (https://www.boost.org/doc/libs/1_86_0/libs/hana/doc/html/index.html)
C++ Learning (https://t.me/Learning_pluses) 👩💻
🔴 18 сентября состоится крупнейшая конференция по трафику и продажам в Телеге
1⃣2⃣3⃣4⃣5⃣
Вам однозначно стоит быть, если:
— Работаете с трафиком из Telegram Ads или посевов;
— Продаете свои услуги через Telegram;
— Еще не зарабатываете в TG, но планируете;
📣 Вот лишь некоторые из спикеров:
— Алексей Соловьев (Event and Community Manager at TON)
— Дмитрий Форман (Digital-Директор Самолет)
— Марат Шайхетдинов (Founder TgConf & Clickise)
— Ирина Нумизматка (Автор крупнейшего блога про Telegram Ads)
— Глеб Яскевич (Директор по маркетингу Getcourse)
— Артур Халиуллин (Сеть каналов на 1млн+ подписчиков)
— Влад Силантьев (С нуля дошел до 63 проектов в Telegram Ads)
— Павел Калюканов (Product Manager TgStat)
и множество других не менее интересных спикеров
🕔 Дата и время: 18 сентября в 9:00
📍 Место проведения: Main Stage, Москва
А в заключении мероприятия пройдет Aftertparty для VIP-участников и спикеров с хедлайнером, которого все знают!
🎟 Приобрести билет до повышения цен (https://tgconf.ru/?utm_source=partners&utm_medium=cpm&utm_campaign=marketer_prPython_per_month)
Промокод telegapart дает скидку 10% на все билеты
1⃣2⃣3⃣4⃣5⃣
Вам однозначно стоит быть, если:
— Работаете с трафиком из Telegram Ads или посевов;
— Продаете свои услуги через Telegram;
— Еще не зарабатываете в TG, но планируете;
📣 Вот лишь некоторые из спикеров:
— Алексей Соловьев (Event and Community Manager at TON)
— Дмитрий Форман (Digital-Директор Самолет)
— Марат Шайхетдинов (Founder TgConf & Clickise)
— Ирина Нумизматка (Автор крупнейшего блога про Telegram Ads)
— Глеб Яскевич (Директор по маркетингу Getcourse)
— Артур Халиуллин (Сеть каналов на 1млн+ подписчиков)
— Влад Силантьев (С нуля дошел до 63 проектов в Telegram Ads)
— Павел Калюканов (Product Manager TgStat)
и множество других не менее интересных спикеров
🕔 Дата и время: 18 сентября в 9:00
📍 Место проведения: Main Stage, Москва
А в заключении мероприятия пройдет Aftertparty для VIP-участников и спикеров с хедлайнером, которого все знают!
🎟 Приобрести билет до повышения цен (https://tgconf.ru/?utm_source=partners&utm_medium=cpm&utm_campaign=marketer_prPython_per_month)
Промокод telegapart дает скидку 10% на все билеты