Изучаем C++. По вопросам сотрудничества: @adv_and_pr
Вывод параметра шаблона класса
Довольно странное название функции, да? Её суть в том, что с C++17 компилятор может сам определять типы аргументов конструкторов стандартных классов. Раньше же это работало лишь для функций.
Для того, чтобы осознать удобство этой функции, нужно быть знакомыми с конструкторами классов в C++.
Является ли число степенью двойки
Мы можем проверить, является ли число степенью двойки или нет напрямую, используя код выше. :D
Использование emplace_back вместо push_back
В C++ 11 emplace_back работает так же, как push_back, добавляя элементы в конец вектора. emplace_back работает быстрее, так как push_back сначала создает временную переменную, а затем добавляет ее в конец вектора.
malloc стал безопасен
В предыдущих версиях использование низкоуровневых функций, унаследованных из языка Си, не рекомендовалось. Проблема в том, что Си оперирует байтами, а в С++ происходит работа с объектами со своим временем жизни и областью видимости. До С++ 20 время жизни объекта начиналось после вызова оператора new. В новой версии все изменилось — принято считать, что набор низкоуровневых функций — memcpy, memmove, malloc, aligned_alloc, calloc, realloc, bit_cast, начинает время жизни объекта. Т. е. следующий код(см картинку) будет валиден.
Т. е. у нас появляется обратная совместимость с языком Си, но относительно С++ в новой трактовке.
Избавляемся от макросов
В целом, разработчики стандарта стараются исключить препроцессор. Как следствие, в новой версии можно не пользоваться макросами FILE и LINE, а взамен использовать std::source_location(см картинку).
Как мы видим, код становится более единообразным, в одном стиле, с расширяемым функционалом.
#вопросы_с_собеседований
Для чего используется ключевое слово volatile?
Для указания компилятору, что доступ к переменной может осуществляться из мест, неподконтрольных ему. А как следствие, что работу с данной переменной не нужно подвергать разного рода оптимизациям.
Т.е. если volatile присутствует в каком-то условии, которое не меняется со временем, то компилятор может оптимизировать его, чтобы избежать ненужных проверок, при использовании volatile компилятор скорее всего не будет этого делать.
🧑🏻💻Хотите писать безопасный, масштабируемый и читаемый код на современном C++?
Актуальное повышение квалификации «C++ Developer. Professional» создано для тех, кто хочет выйти за пределы базового синтаксиса и овладеть актуальными практиками разработки — от C++20 и C++23 до многопоточности, шаблонов и сетевого взаимодействия.
Программа составлена практикующими разработчиками и обновляется с учётом требований индустрии. Вы выполните 14 практических заданий, отработаете паттерны проектирования, оптимизацию, работу с памятью и получите диплом, который котируется в ведущих IT-компаниях.
⚡️Набор закрывается совсем скоро, это последний шанс пройти вступительное тестирование и получить скидку на обучение: https://otus.pw/fXvq/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
⚙️Уже работаете с Rust, но хотите эффективно интегрировать его с другими языками? Или интересуетесь, как устроен процесс сборки и линковки в этом языке?
🗓На открытом вебинаре 24 апреля в 20:00 мск мы подробно разберем, как собирать и линковать библиотеки в Rust, как использовать Rust-библиотеки в других языках, а также реализуем Си ABI (Application Binary Interface). Вы получите знания, которые помогут вам повысить производительность ваших проектов и интегрировать Rust в существующие решения.
👨💻Урок будет полезен всем, кто хочет углубить свои знания в Rust, повысить квалификацию и навыки работы с библиотеками и системами. Вы сможете применять полученные знания в реальных проектах.
👉Присоединяйтесь к открытому вебинару и получите скидку на большое обучение «Rust Developer. Professional»: https://otus.pw/VkfH/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Макрос watch
Макрос watch — один из самых полезных приёмов.
При отладке кода watch(переменная) выведет имя переменной и её значение.
#вопросы_с_собеседований
В чем разница между struct и class?
Ответ: Практически ни в чем. В struct модификаторы доступа по умолчанию public, в class private. Также отличается и наследование по умолчанию, у struct — public, у class — private.
Алгоритм set_symmetric_difference
Строит отсортированную последовательность из элементов, которые встречаются только в первой последовательности [first1, last1) или только во второй - [first2, last2).
Алгоритмы all_of, any_of и none_of
Начиная с C ++ 11, в STL C ++ добавляются некоторые новые интересные алгоритмы. Эти алгоритмы работают с массивом и полезны для экономии времени во время кодирования и, следовательно, также полезны в конкурентном программировании.
Создаем сложные интерфейсы и спецэффекты на базе Qt. Часть I
Смотреть статью
🧟Зомби-апокалипсис: создаем противников в стиле Days Gone
На этом уроке вы добавите в свой проект зомби-противников, которые будут угрожать вашему персонажу. Мы разберем, как добавить нового персонажа, настроить его анимации, реакцию на урон и передвижение по уровню на движке Unreal Engine 5. Вы узнаете, как создать атмосферу напряженности и вызова, как в Days Gone.
Основные темы:
- добавление нового персонажа в проект
- добавление анимации в персонажа
- добавление реакции на урон
- настройка передвижения по уровню
👉 Регистрация и подробности о курсе "Unreal Engine Game Developer. Basic": https://otus.pw/XVYY/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Строковые литералы как параметры шаблона
Начиная с C ++ 20, вы можете использовать строку в качестве параметра шаблона, не являющегося типом. Идея состоит в том, чтобы использовать стандартную строку basic_fixed_string, которая имеет конструктор constexpr. Конструктор constexpr позволяет ему создать экземпляр фиксированной строки во время компиляции.
Вроде бы мелочь, а приятно — не нужно производить обходных маневров и использовать лишнюю память.
Стань частью масштабного ИТ-события от МТС
True Tech Day 2025 — третья технологическая конференция МТС для профессионалов ИТ‑индустрии. Одна из главных тем в этом году — тренды и практики искусственного интеллекта.
В программе:
— Доклады от ученых и зарубежных спикеров с индексом Хирша более 50.
— Кейсы применения современных ИИ‑решений — от AI‑агентов, тестов LLM и бенчмарков до вопросов регулирования.
— AI-интерактивы и технологические квесты.
— Пространство для нетворкинга,
…а еще after-party со звездным лайн-апом.
Когда: 6 июня
Где: Москва, МТС Live Холл и онлайн
Участие бесплатно. Регистрируйся по ссылке.
🧑🏻💻Хотите научиться писать нейросети на одном из самых быстрых и безопасных языков программирования?
На открытом уроке 6 мая в 20:00 МСК мы научим вас создавать простейшую нейросеть с нуля, используя минимальные библиотеки. Вы не только познакомитесь с Rust, но и узнаете, как оптимизировать вычисления для работы с нейронными сетями.
Вы сможете писать быстрые и эффективные нейросети на Rust — языке, который сегодня активно используется для решения высоконагруженных задач.
👉Присоединяйтесь к открытому уроку и получите скидку на программу обучения «Rust Developer. Basic»: https://otus.pw/bGCy/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Алгоритм copy_n
Используется для копирования элементов из одного контейнера в другой.
Хочешь не просто писать код, а строить фундамент всей транспортной логики 2ГИС? Присоединяйся!
В команде Transport Core мы соединяем алгоритмы и интерфейсы, чтобы маршруты в приложении были быстрыми, понятными и живыми.
Что будешь делать:
• Реализовывать бизнес-логику маршрутов: авто, пешком, общественный транспорт
• Прокладывать маршруты, привязывать геопозицию, отображать линии движения
• Делать UI-экраны проезда, запускать дикторов, настраивать курсоры
• Будешь мостом между алгоритмами и фронтом — всё, чтобы навигация была умной и понятной
Что получаешь:
• C++20, сборка под Windows, Linux, macOS, Android, iOSGit, CI, кроссплатформенность и хороший продакшн-процесс
• Команду, где ценят чистоту кода и обязательное code-review
• Гибкость: офис или удалёнка, разные часовые пояса, всегда на связи
Хочешь влиять на то, как люди добираются до цели?Тогда ты нам нужен откликайся здесь!
#вопросы_с_собеседований
В чем отличие vector от deque?
Ответ: Здесь вспоминают о наличии у deque методов push_front и pop_front. Но основное отличие в организации памяти, у vector она как у обычного Си-массива, т.е. последовательный и непрерывный набор байт, а у deque это фрагменты с разрывами. За счет этого отличия vector всегда можно привести к обычному массиву или скопировать целиком участок памяти, но зато у deque операции вставки/удаления в начало быстрее (O(1) против O(n)), ввиду того, что не нужно перемещать.
#вопросы_с_собеседований
Что такое чисто виртуальный метод и абстрактный класс?
Ответ: Чисто виртуальный метод — это метод, у которого отсутствует реализация. Абстрактный класс — это класс имеющий хотя бы один чисто виртуальный метод. Как следствие, экземпляр подобного класса не может быть создан т.к. отсутствует реализация виртуального метода.
Сортировка пузырьком
Определите, сколько обменов сделает алгоритм пузырьковой сортировки по возрастанию для данного массива.
Формат входных данных:
На первой строке дано целое число n (1 ≤ n ≤ 1000) – количество элементов в массиве. На второй строке – сам массив. Гарантируется, что все элементы массива – различные целые числа, не превышающие по модулю 10^9.
Формат выходных данных:
Выведите одно число – количество обменов пузырьковой сортировки.
init внутри if и switch
Эта возможность C++17 мне полюбилась сразу же, как только я узнал о ней.
Теперь вы можете инициализировать переменные и проверять условия сразу же внутри блоков if и switch. Это помогает сохранять код понятным и чистым.
🧑🏻💻Как эффективно управлять ошибками в коде и избегать багов?
На открытом вебинаре 23 апреля в 20:00 МСК вы познакомитесь с мощной системой обработки ошибок в Rust и узнаете, почему этот подход считается одним из самых безопасных и надёжных. Вместе с экспертом вы освоите оператор «?» и работу с типами Result и Option.
Вы получите практические навыки и сможете легко писать код без неожиданных сбоев и исключений, повысив надежность ваших приложений.
👉Регистрируйтесь на вебинар и получите специальную скидку на полный курс «Rust Developer. Basic»: https://otus.pw/mfo4/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Для чего нужен аллокатор и как создать свой собственный аллокатор?
Аллокатор это шаблонный класс, который отвечает за выделение памяти и создание объектов. По умолчанию все контейнера используют std::allocator<T>.
В языке c++ имеется так же возможность написать свой аллокатор. У своего алокатора должно быть такое объявление(см картинку).
Как написать «Змейку» на C++ в четыре переменные?
Пишем классическую «Змейку», как на КДПВ, в четыре переменные.
Смотреть статью
Что не так с кодом в Капибаровске?
Узнайте на T-CTF — соревновании от Т-Банка для опытных ИТ-специалистов. Решайте задания по спортивному хакингу с шансом выиграть приз до 420 000 ₽.
Вот как все устроено:
— Выберите Лигу Разработки или Лигу Безопасности по своим навыкам. Если участвуете впервые, можно потренироваться на демозаданиях.
— Соревнуйтесь один или в команде до 3 человек. Вам помогут найти команду, если нет своей.
— Участвуйте онлайн или приходите в ИТ-хаб Т-Банка в одном из 6 городов России.
— Используйте время на решение заданий и общение с участниками — у вас будет 36 часов.
Задания будут интересны разработчикам, QA- и SRE-инженерам, аналитикам и другим ИТ-специалистам уровня middle и senior.
Успейте зарегистрироваться до 18 апреля.
Реклама. АО «ТБанк», лицензия ЦБ РФ № 2673, erid:2RanymhgQ6D
Генератор G-кода для 3D-принтеров (RepRap, Makerbot, Ultimaker и др.).
https://www.libhunt.com/r/PrusaSlicer
Кортеж — tuple
Как и pair, tuple — коллекция значений различных типов данных конкретного размера.
В некоторых случаях вместо tuple удобнее использовать std::array. Это обычный массив с некоторыми функциями стандартной библиотеки C++, который был добавлен в C++11.
Атрибуты [[likely]] и [[unlikely]]
В C++20 мы получили новые атрибуты [[likely]] и [[unlikely]], которые позволяют подсказывать оптимизатору, является ли путь выполнения более или менее вероятным.