Senior C++ Developer
11.5K subscribers
1.51K photos
3 videos
644 links
Изучаем C++.

По вопросам сотрудничества: @adv_and_pr

РКН: https://www.gosuslugi.ru/snet/676e9a1e4e740947beca35ba
Download Telegram
init внутри if и switch

Эта возможность C++17 мне полюбилась сразу же, как только я узнал о ней.

Теперь вы можете инициализировать переменные и проверять условия сразу же внутри блоков if и switch. Это помогает сохранять код понятным и чистым.
Макрос watch

Макрос watch — один из самых полезных приёмов.

При отладке кода watch(переменная) выведет имя переменной и её значение.
Для чего нужен аллокатор и как создать свой собственный аллокатор?

Аллокатор это шаблонный класс, который отвечает за выделение памяти и создание объектов. По умолчанию все контейнера используют std::allocator<T>.
В языке c++ имеется так же возможность написать свой аллокатор. У своего алокатора должно быть такое объявление(см картинку).
Алгоритм set_symmetric_difference

Строит отсортированную последовательность из элементов, которые встречаются только в первой последовательности [first1, last1) или только во второй - [first2, last2).
This media is not supported in your browser
VIEW IN TELEGRAM
Как написать «Змейку» на C++ в четыре переменные?

Пишем классическую «Змейку», как на КДПВ, в четыре переменные.

Смотреть статью
Алгоритмы all_of, any_of и none_of

Начиная с C ++ 11, в STL C ++ добавляются некоторые новые интересные алгоритмы. Эти алгоритмы работают с массивом и полезны для экономии времени во время кодирования и, следовательно, также полезны в конкурентном программировании.
Трюки с логарифмом

Функцию log можно использовать для ряда изящных решений.
#вопросы_с_собеседований
Объясните ключевые слова mutable и volatile.

Ключевое слово volatile сообщает компилятору, что переменная может измениться без ведома компилятора. Переменные, объявленные как volatile, не будут кэшироваться компилятором и, таким образом, всегда будут считываться из памяти.

Ключевое слово mutable можно использовать для переменных-членов класса. Изменяемые переменные могут меняться из константных функций-членов класса.
#вопросы_с_собеседований
Какую проблему решает пространство имён?

Пространство имен — это идентификатор, предоставляющий несколько библиотек. Используется для устранения конфликтов имен, когда имя связано с двумя или более библиотеками. Включает внешние объявления библиотеки с уникальными пространствами имен, что исключает возможность конфликта.
#вопросы_с_собеседований
В чем разница между struct и class?

Ответ: Практически ни в чем. В struct модификаторы доступа по умолчанию public, в class private. Также отличается и наследование по умолчанию, у struct — public, у class — private.
Кортеж — tuple

Как и pair, tuple — коллекция значений различных типов данных конкретного размера.

В некоторых случаях вместо tuple удобнее использовать std::array. Это обычный массив с некоторыми функциями стандартной библиотеки C++, который был добавлен в C++11.
Строковые литералы как параметры шаблона

Начиная с C ++ 20, вы можете использовать строку в качестве параметра шаблона, не являющегося типом. Идея состоит в том, чтобы использовать стандартную строку basic_fixed_string, которая имеет конструктор constexpr. Конструктор constexpr позволяет ему создать экземпляр фиксированной строки во время компиляции.

Вроде бы мелочь, а приятно — не нужно производить обходных маневров и использовать лишнюю память.
Атрибуты [[likely]] и [[unlikely]]

В C++20 мы получили новые атрибуты [[likely]] и [[unlikely]], которые позволяют подсказывать оптимизатору, является ли путь выполнения более или менее вероятным.
Использование emplace_back вместо push_back

В C++ 11 emplace_back работает так же, как push_back, добавляя элементы в конец вектора. emplace_back работает быстрее, так как push_back сначала создает временную переменную, а затем добавляет ее в конец вектора.
#вопросы_с_собеседований
Для чего используется ключевое слово volatile?

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

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

5 ноября в 20:00 на открытом уроке курса «Разработчик ПО для дронов: ArduPilot, C++ и ROS 2» разберёте логи реальных аварий БПЛА и настройку Failsafe-сценариев.

Узнаете, какие данные записывает автопилот и как выгрузить DataFlash-логи через Mission Planner. На примере двух-трёх случаев рассмотрите сбои навигации, питания и связи. Разберёте графики EKF, IMU и токов, чтобы восстановить последовательность событий и разобраться в возможных причинах отказа.

Затем перейдёте к аварийным сценариям в ArduPilot. Настроите стандартный Failsafe через графический интерфейс и проверите поведение дрона при потере связи в симуляторе SITL.

Урок подойдёт C/C++- и Python-разработчикам, инженерам встраиваемых систем и специалистам по БПЛА, которые хотят глубже понимать работу автопилота. После занятия вы сможете увереннее разбирать полётные логи и проверять настройки реакции на сбои в симуляторе.

Урок проведёт Игорь Морозов.

Зарегистрироваться: https://otus.pw/l0TS/

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru