C++_BE1
405 subscribers
278 photos
1 video
42 files
523 links
Канал по C/C++, полезный и интересный контент для всех уровней.
По вопросам сотрудничества @cyberJohnny
Download Telegram
➡️ Циклы for по диапазону

• Синтаксический сахар для перебора элементов контейнера.

std::array a {1, 2, 3, 4, 5};
for (int& x : a) x *= 2;
// a == { 2, 4, 6, 8, 10 }

• Обратите внимание на разницу при использовании int в противовес int&:

std::array a {1, 2, 3, 4, 5};
for (int x : a) x *= 2;
// a == { 1, 2, 3, 4, 5 }

C++ Learning (https://t.me/Learning_pluses) 👩‍💻
Yandex DEVent PRO (https://events.yandex.ru/events/deventpro_spb/?utm_source=telegram&utm_medium=cpp&utm_campaign=mg_posev_tg_devent_pro_spb&utm_content=learning_pluses_03_06_24&erid=2VSb5yu4bRJ) в Питере

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

В этот раз митап пройдёт в Санкт-Петербурге 19 июня (https://events.yandex.ru/events/deventpro_spb/?utm_source=telegram&utm_medium=cpp&utm_campaign=mg_posev_tg_devent_pro_spb&utm_content=learning_pluses_03_06_24&erid=2VSb5yu4bRJ): будет настоящее раздолье для нетворкинга, а ещё обсуждение горячих и спорных тем по разработке в формате speed dating.

Спикеры и доклады:

🟡Константин Гудков, руководитель группы разработки Feature store. Расскажет о процессе создания Feature Store — интерфейса для работы с данными, который используется ML-моделями в Рекламе

🟡Сергей Скворцов, руководитель службы поискового райнтайма. Обсудит, как анализировать производительность нативных программ под Linux под нагрузкой с помощью Perforator

🟡Николай Савушкин, руководитель службы рекомендательных технологий. Расскажет о Real-time processing в рекомендательных системах Яндекса

А после докладов вас ждёт афтерпати: кальяны, аэрохоккей и прочие активности!

Узнать подробную информацию и зарегистрироваться можно по ссылке (https://events.yandex.ru/events/deventpro_spb/?utm_source=telegram&utm_medium=cpp&utm_campaign=mg_posev_tg_devent_pro_spb&utm_content=learning_pluses_03_06_24&erid=2VSb5yu4bRJ).

Ждём вас!

Реклама. ООО "Яндекс", ИНН 7736207543.
➡️ Удаленные и дефолтные функции

struct demo
{
demo() = default;
};

demo d;

• У вас вполне закономерно может возникнуть вопрос, зачем вам писать 8+ букв (т.е. = default;), когда можно просто использовать {}, т.е. пустой конструктор? Никто вас не останавливает. Но подумай о конструкторе копирования, операторе копирования присваиванием, и т.д.

• Пустой конструктор копирования, например, не то же самое, что конструктор копирования по умолчанию (который будет выполнять почленную копию всех членов).

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

class demo
{
int m_x;

public:
demo(int x) : m_x(x){};
demo(const demo &) = delete;
demo &operator=(const demo &) = delete;
};

demo obj1{123};
demo obj2 = obj1; // ОШИБКА -- вызов удаленного конструктора копирования
obj2 = obj1; // ОШИБКА -- оператор = удален

🗣️ В старом С++ вы должны были сделать его приватным. Но теперь в вашем распоряжении есть директива компилятора delete.

C++ Learning (https://t.me/Learning_pluses) 👩‍💻
➡️ Делегирование конструкторов

• В старом C++ вам нужно создавать функцию-член для инициализации и вызывать ее из всех конструкторов для достижения универсально инициализации.

• Но начиная с C++11 конструкторы теперь могут вызывать другие конструкторы из того же класса с помощью списка инициализаторов.

C++ Learning (https://t.me/Learning_pluses) 👩‍💻
➡️ Концепты (Concepts) в C++

Концепты - это новая возможность в C++20, которая позволяет задавать ограничения на шаблонные параметры. Это позволяет писать более безопасный и читаемый код, поскольку компилятор проверяет соответствие типов требованиям концептов на этапе компиляции.

• template concept Arithmetic = std::is_arithmetic_v; определяет концепт Arithmetic, который ограничивает типы, для которых значение std::is_arithmetic_v истинно (т.е. типы, которые являются арифметическими).

• template T add(const T& a, const T& b) определяет шаблонную функцию add, которая будет компилироваться только для типов, удовлетворяющих концепту Arithmetic.
Использование функции add:

• Примеры с целыми числами и числами с плавающей запятой успешно вызывают функцию add.

• Пример со строками (закомментированный) вызовет ошибку компиляции, так как std::string не является арифметическим типом.

C++ Learning (https://t.me/Learning_pluses) 👩‍💻
Что будет выведено при выполнении кода?

C++ Learning (https://t.me/Learning_pluses) 👩‍💻
➡️ Модули (Modules) в C++

Модули - это система сборки и организации кода, представленная в C++20.

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

• Модули заменяют использование препроцессорных директив #include, улучшая время компиляции и предотвращая проблемы с зависимостями и макросами.

• Модули значительно сокращают время компиляции по сравнению с традиционными заголовочными файлами, так как они компилируются только один раз.

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

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

C++ Learning (https://t.me/Learning_pluses) 👩‍💻
👍1
➡️ Погружаемся в мир асинхронного программирования: корутины в C++

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

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

C++ Learning (https://t.me/Learning_pluses) 👩‍💻
➡️ Взламываем многопоточность: atomic_ref в C++

C++20 представил возможность для управления многопоточностью: atomic_ref.

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

C++ Learning (https://t.me/Learning_pluses) 👩‍💻
➡️ Smart Pointers в C++

Smart Pointers - это мощный инструмент в C++, предоставляющий автоматическое управление памятью и избавляющий от проблем с утечкой памяти. Давайте рассмотрим, как они работают.

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

C++ Learning (https://t.me/Learning_pluses) 👩‍💻
➡️ Путь к эффективности: Range-based for loop в C++

Range-based for loop — это мощный инструмент в C++, который позволяет перебирать элементы контейнера более эффективно и удобно.

• Код становится более понятным и лаконичным благодаря использованию Range-based for loop.
• Повышается безопасность кода за счет автоматического предотвращения выхода за пределы контейнера.
• Автоматически оптимизируется компилятором для достижения лучшей производительности.

C++ Learning (https://t.me/Learning_pluses) 👩‍💻
➡️ Захват переменных по перемещению в C++

C++14 добавила полезную возможность для работы с лямбда-выражениями — захват переменных по перемещению (Capture by Move). Эта фишка позволяет вам захватывать объекты без копирования, что особенно полезно для объектов, которые дорого копировать.

• Уменьшает накладные расходы, связанные с копированием объектов, особенно для объектов, копирование которых дорого.
• Использование семантики перемещения улучшает производительность и снижает потребление ресурсов.
• Лямбда-выражения с захватом по перемещению позволяют создавать более гибкие и мощные функциональные объекты.

C++ Learning (https://t.me/Learning_pluses) 👩‍💻
➡️ Корутины для асинхронного программирования

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

• Позволяют более эффективно управлять ресурсами, избегая блокировок и повышая производительность.
• Интегрируются с новыми библиотеками и фреймворками, поддерживая современные парадигмы программирования.

C++ Learning (https://t.me/Learning_pluses) 👩‍💻
➡️ Преимущества оператора "auto" в C++

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

• Оператор "auto" помогает уменьшить объем шаблонного кода, особенно при работе с контейнерами и итераторами.

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

• Использование оператора "auto" делает код менее зависимым от конкретных типов, что облегчает рефакторинг и обновление кода в будущем.

C++ Learning (https://t.me/Learning_pluses) 👩‍💻
➡️ Путь к утонченности: Использование диапазонных циклов

• Диапазонные циклы (range-based for loop) обеспечивают простой и элегантный способ итерации по элементам контейнеров. Эта конструкция делает код более компактным и читаемым.

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

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

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

C++ Learning (https://t.me/Learning_pluses) 👩‍💻
💡 Разрабатываешь на C++? Освой кроссплатформенную разработку на QT и ОС Аврора

❗️ Вкладывай в перспективу - вкладывай в себя!

Пройди тест из 20 вопросов и проверь, насколько хорошо nы знаешь язык C++ и готов освоить QT и ОС Аврора .
Сможешь сдать — пройдёшь на продвинутый онлайн-курс "Разработка прикладного ПО на Qt и ОС Аврора" от OTUS.

👉 ПРОЙТИ ТЕСТ: https://clck.ru/3BMj4C

🎁 Успей на курс! Только до 23 июня скидка 10%, подробности у наших менеджеров - после прохождения теста они свяжутся с вами.

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
➡️ Использование диапазонов с std::ranges

• C++20 ввел мощную библиотеку std::ranges, которая предоставляет более удобные и выразительные способы работы с последовательностями данных.

• Диапазоны упрощают операции с контейнерами, делая код более читаемым и декларативным.

• Диапазоны позволяют легко комбинировать различные операции (фильтрация, преобразование и т. д.) в одну цепочку.

• Диапазоны используют ленивые вычисления, что может улучшить производительность за счет минимизации ненужных операций.

C++ Learning (https://t.me/Learning_pluses) 👩‍💻