seniorcpp | Unsorted

Telegram-канал seniorcpp - Senior C++ Developer

13626

Изучаем C++. По вопросам сотрудничества: @adv_and_pr

Subscribe to a channel

Senior C++ Developer

std::optional

std::optionalэто класс-обертка, который может содержать значение или быть пустым.
Он используется для обозначения опционального значения.

Основное его применение — возвращать значение из функции, которое может отсутствовать. Например, при поиске элемента в контейнере, если элемент не найден, вместо исключения можно вернуть std::optional.
Также он удобен при работе со значениями, которые могут отсутствовать, например при чтении из базы данных.

По сравнению с указателями std::optional более выразителен — сразу видно, что значение может отсутствовать.
Кроме того, он не имеет проблем с утечками памяти и инициализацией.

Читать полностью…

Senior C++ Developer

Функция value_or

Функция value_or используется для получения значения из объекта типа std::optional.

Класс std::optional позволяет хранить значение или отсутствие значения.
Чтобы получить это значение из optional, обычно используют метод value(). Но если значения нет, это выбросит исключение.

Чтобы избежать исключения при отсутствии значения, можно воспользоваться функцией value_or. Она принимает объект std::optional и значение по умолчанию.
Если в optional есть значение — возвращается оно. Если значения нет — возвращается значение по умолчанию.

Читать полностью…

Senior C++ Developer

C++ — мощный инструмент, но с ним нужно правильно работать

Хотите писать на C++, но настройка окружения кажется головной болью?

◽️ Компилятор не видит файлы?
◽️Дебаг работает через раз?
◽️VSCode — просто красивый редактор?

💡 Приходите на открытый вебинар «Готовим рабочее место: C++ + VSCode»!

📅 5 марта в 20:00 (мск)

Мы разберём:
◽️Как настроить VSCode для C++: компиляторы, расширения, дебаг
◽️Как запускать программы без ошибок и ручной магии
◽️Как сделать среду разработки удобной и эффективной

🎯 А ещё всем участникам подарим скидку на топовый курс «C++ Developer»!

🔗 Регистрация: https://otus.pw/v1zf/

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

Читать полностью…

Senior C++ Developer

#вопросы_с_собеседований
Как изменить поле класса в константном методе класса?

В константном методе класса нельзя изменить значение поля, объявленного как const.
Однако, можно изменить поле, объявленное без ключевого слова const, даже внутри const метода. Хотя это и не рекомендуется, так как нарушает идею неизменяемости объекта в константном контексте.

Чтобы все же иметь возможность модифицировать поля внутри const метода, можно объявить нужные поля как mutable. Тогда компилятор разрешит изменять эти поля, даже если вызов осуществляется на константный объект и из константного метода.
Но использование mutable стоит ограничивать, по возможности избегая. Лучше пересмотреть структуру класса, чтобы константные методы не нуждались в изменении полей.

Читать полностью…

Senior C++ Developer

std::any_cast

std::any_cast используется для приведения объектов типа std::any к конкретному типу данных во время выполнения программы.

Класс std::any может хранить данные любого типа, но при этом теряется информация о реальном типе данных.
Чтобы получить эти данные обратно в изначальный тип, и используется std::any_cast. Он проверяет, совместим ли хранимый в std::any объект с запрошенным целевым типом.
Если совместим — возвращает ссылку на данные нужного типа.

Например, если в std::any был помещен объект типа int, то с помощью std::any_cast этот int можно получить обратно в переменную типа int. Аналогично для других типов данных.

Читать полностью…

Senior C++ Developer

#вопросы_с_собеседований
Что будет, если дважды вызвать free?

Если вызвать free два раза для одного и того же участка памяти, это приведет к неопределенному поведению программы и скорее всего к ее аварийному завершению.

При первом вызове free освобождается участок памяти и возвращается в кучу для последующего выделения.
При повторном вызове для того же участка менеджер памяти попытается освободить уже освобождённую область.

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

Читать полностью…

Senior C++ Developer

Приглашаем на встречу РГ21 по C++

Приходите обсудить новости последней встречи международного комитета по стандартизации языка. Ещё в программе — ответы на ваши вопросы о стандарте С++ и афтерпати.

Встречу проведёт Антон Полухин, руководитель группы разработки общих компонентов Техплатформы городских сервисов Яндекса.

Москва, онлайн и офлайн 25 марта.

Регистрируйтесь.

Читать полностью…

Senior C++ Developer

👩‍💻 C++: не просто язык, а ключ к карьере в топовой IT-компании!

Повышение квалификации на курсе «C++ Developer. Professional» — ваш ключ к тому, чтобы прокачать навыки и стать востребованным разработчиком.

Что вас ждёт:

— Работа с новыми стандартами C++20 и C++23.
— 14 практических работ для портфолио.
— Освоение многопоточного программирования, сетей и работы с данными.
— Понимание паттернов проектирования и тонкостей языка.

Почему выбирают нас?

— Преподаватели — опытные эксперты из ведущих IT-компаний.
— Живые лекции, поддержка на каждом этапе обучения.
— Диплом OTUS, который ценят работодатели.

🔥 До 28.02 скидка на все курсы 10%, кроме этого дарим промокод CPPPRO2025_02 который прибавляет к скидке еще 5% !!!

🎫 Курс можно приобрести в рассрочку

➡️ Пройти тест и забрать скидку: https://otus.pw/TmD6/

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

Читать полностью…

Senior C++ Developer

Получите оффер в YADRO всего за 3 дня! 🚀

Компания-лидер инженерной индустрии в России YADRO приглашает C++ Software Engineer на SPRINT OFFER.

Команда Телеком ждёт кандидатов сразу в два направления: Telecom Platform и Разработка базовых станций с поддержкой LTE/GSM и 5G Core.

Если вам интересно принять участие в разработке первых российский базовых станций стандартов GSM/LTE — присоединяйтесь к команде Телеком. Вы будете с нуля создавать решения для беспроводных мобильных сетей и сопутствующих услуг: от исследований и прототипирования до вывода в коммерческое использование.

Большую часть кода разработчики пишут на C++. В зависимости от компонента применяют как последние «фишки» С++20, так и занимаются низкоуровневой оптимизацией кода для повышения производительности.

🔵 Читайте подробности на сайте и оставляйте заявку до 9 марта → по ссылке.

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

Читать полностью…

Senior C++ Developer

void указатели

Void указатель (void*) — это не типизированный указатель, который может указывать на объект любого типа.
Void указатели могут приводиться к любому другому типу указателей и обратно без явного преобразования.

Арифметические операции недопустимы для void указателей, так как компилятор не знает размер объекта в памяти. При их использовании нужно следить за типобезопасностью и правильностью приведений типов.

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

#это_база

Читать полностью…

Senior C++ Developer

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

Если ваш проект открыт для поддержки библиотеки, рассмотрите возможность использования boost::algorithm::join алгоритм. Он объединяет все элементы в указанном списке в строку, где сегменты объединяются заданным разделителем.

Другие способы преобразования вектора в строку можно найти здесь.

Читать полностью…

Senior C++ Developer

Алгоритм nth_element

Перестраивает список таким образом, что элемент в n-й позиции — это тот элемент, который должен быть в этой позиции, если мы сортируем список.

Читать полностью…

Senior C++ Developer

#вопросы_с_собеседований
В чем различия между dynamic_cast и reinterpret_cast?

Правильный ответ может звучать так:

Динамическое приведение - это безопасное приведение по иерархии наследования, в том числе и для виртуального наследования. Проводит преобразование типа, предварительно убедившись (с помощью RTTI), что объект expression_from в действительности является объектом типа type_to. Если нет: для указателей возвращает NULL.

При reinterpret_cast результат не гарантирован, проверки не осуществляются.
Ограничения на expression_from: порядковый тип (логический, символьный, целый, перечисляемый), указатель, ссылка.
Ограничения на type_to: для порядкового типа или указателя — порядковый тип или указатель. Для ссылки — ссылка.

Читать полностью…

Senior C++ Developer

Удаление указателя NULL

Удаление указателя NULL не приводит к каким-либо изменениям и ошибкам.

Читать полностью…

Senior C++ Developer

Чтение и отображение изображения в OpenCV с использованием C ++

Как мы видим нам потребовалось включить пространства имен cv, которое содержит все функции, классы и структуры данных OpenCV.

Более подробное описания кода можно найти здесь.

Читать полностью…

Senior C++ Developer

Ключевое слово auto

autoэто тип вывода, который позволяет компилятору автоматически определять тип переменной на основе выражения инициализации.
Он был введен в C++11 для упрощения объявления переменных, избавляя от необходимости указывать длинные и сложные типы.

При использовании auto тип переменной выводится компилятором во время компиляции и не может меняться во время выполнения.
Работает для любых типов данных — встроенных, пользовательских, шаблонов.

Переменная, объявленная с auto, всегда инициализируется при объявлении.

auto полезен при работе с итераторами, с функциями возврата сложных типов, для упрощения кода.

#это_база

Читать полностью…

Senior C++ Developer

Алгоритм find_if

Find_if — это алгоритм из стандартной библиотеки algorithm. Он применяется к диапазону элементов (например, контейнеру) и ищет элемент, удовлетворяющий заданному условию.
В качестве условия передается функция или функциональный объект (предикат). Предикат принимает элемент и возвращает истину, если элемент подходит.

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

Find_if удобно применять с лямбда-функциями в качестве предикатов поиска.

#это_база

Читать полностью…

Senior C++ Developer

#вопросы_с_собеседований
Какая разница между структурой и классом?

Главное отличие заключается в том, что структуры по умолчанию имеют public доступ к своим полям, в то время как классы по умолчанию имеют private доступ.

— Структуры обычно используются для простых объектных типов данных, в то время как классы — для более сложных объектов.
— Структуры копируются по значению, а классы — по ссылке. Это означает, что при копировании структуры создается новый объект, а при копировании класса копируется указатель на объект.
— Структуры не поддерживают наследование, в отличие от классов.

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

Читать полностью…

Senior C++ Developer

C++ Russia 2025 — конференция с техническими докладами про перформанс, оптимизации, многопоточность и инструменты С++

🧑‍💻 13 марта онлайн
📍 20–21 марта в Москве в отеле «МонАрх»

Вас ждут 39 докладов от 47 спикеров о многопоточности, новых стандартах, компиляторах и неочевидных нюансах C++.

Практикующие инженеры и техлиды разберут:
Оптимизации userver: неожиданные способы ускорения shared_ptr, экономии памяти и балансировки.
Type erasure в деталях: как оборачивать полиморфные объекты со «стертыми» типами.
Branch prediction: как работает спекулятивное исполнение и как оптимизировать код в критических местах.

Больше докладов — в расписании.

Билеты уже на сайте. Если оплачиваете самостоятельно — промокод SENIORCPP дает скидку 15% на билеты «Для частных лиц».

Реклама. ООО «Джуг Ру Груп». ИНН 7801341446

Читать полностью…

Senior C++ Developer

Часы за сложными задачами, постоянная вовлеченность в проекты и стремление к профессиональному росту — это то, что отличает настоящего эксперта. Но когда переработки и постоянная перегрузка начинают влиять на продуктивность и личную жизнь, стоит задуматься: возможно, пора менять место работы.

BAUM — это не просто IT-компания. Здесь ценят work-life balace, поддерживают профессиональное развитие и заботятся о том, чтобы каждый сотрудник оставался в ресурсе. Спорт, комфортные условия и адекватные задачи — это то, что помогает расти без выгорания.

Присоединяйтесь к BAUM и стройте карьеру в комфортном ритме!

Читать полностью…

Senior C++ Developer

#вопросы_с_собеседований
Расскажите о битовых полях.

Битовые поля (bit fields) — это возможность в С++ объявить структуру или класс, в котором отдельные члены занимают указанное количество бит.

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

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

Читать полностью…

Senior C++ Developer

#вопросы_с_собеседований
Какие методы можно вызвать из константных объектов?

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

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

Читать полностью…

Senior C++ Developer

string.back

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

Возвращаемое значение имеет тип символа строки, обычно char или wchar_t. Если строка пустая, то поведение функции неопределенно, поэтому нужно проверять, что строка не пуста, прежде чем вызывать back().

string.back часто используется в циклах для обработки символов строки с конца или для проверки последнего символа.

#это_база

Читать полностью…

Senior C++ Developer

Исключение std::bad_any_cast

Исключение std::bad_any_cast выбрасывается при неудачной попытке приведения типа any к другому типу. Это происходит, когда тип, к которому производится приведение, не соответствует реальному типу объекта, хранящегося в any.

Например, если в any хранится объект типа int, а мы пытаемся привести его к типу std::string, то будет выброшено исключение bad_any_cast.
Это исключение позволяет обнаружить ошибки при использовании any во время выполнения программы.

Таким образом, bad_any_cast гарантирует типобезопасность при работе с any и указывает на то, что при приведении типов была допущена ошибка.
Чтобы избежать этого исключения, нужно проверять тип объекта в any с помощью any_cast перед приведением типа.

Читать полностью…

Senior C++ Developer

Высокая производительность и безопасность? Да, это про Rust.

Изучайте Rust в нашем курсе-тренажёре!
Получайте практические навыки с первого урока вместе с автором курса и опытным наставником.

Курс-тренажёр - это:
💡 100+ практических задач
💡 пет-проекты в портфолио: blockchain, frontend и backend
💡 code review от наших наставников 24/7 с нашим AI-помощником Ду-Ду
💡 бессрочный доступ к актуальной программе: обновляем каждые 3 месяца
💡 бесплатный демо-доступ с практикой

Для кого этот курс:
для разработчиков на системных языках C и C++
для разработчиков, которые взаимодействуют с высокоуровневыми языками (Python, JavaScript, Java и C#)

Уже сейчас вам доступны 3 первых урока:

Урок #1 | Выбор IDE, установка окружения и первый "hello world"
Соберёте и запустите первый "hello world" проект.

Урок #2 | Базовый синтаксис
Научитесь писать Rust код в процедурном стиле. Изучите типы данных, встроенные и пользовательские типы, функции и переменные

Урок #3 | Владение и заимствование
Используете механизмы управления памятью и ссылками. Решите несколько задач на владение, заимствование и слайсы.

➡️ Получить демо-доступ сейчас

Реклама. Информация о рекламодателе

Читать полностью…

Senior C++ Developer

Ваш код тормозит под нагрузкой?

Не справляется с задачами параллельного вычисления?

💡 Приходите на открытый урок по многопоточному программированию C++!

▫️Вместе напишем многопоточную реализацию задачи подсчёта суммы чисел.
▫️Разберём примитивы синхронизации.
▫️Ускорим код с помощью стандартной библиотеки.

🎯 Вы начнёте осваивать многопоточное программирование и сделаете первый шаг к позициям middle+ в C++!

А ещё получите скидку на большое обучение «C++ Developer».

📅 Успейте записаться на открытый вебинар 25 февраля в 20:00 (мск)!

🔗 Регистрируйтесь прямо сейчас и узнайте, как эффективно управлять потоками в C++: https://otus.pw/Yb6O/

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

Читать полностью…

Senior C++ Developer

Алгоритм upper_bound

Он возвращает итератор, указывающий на первый элемент в диапазоне [first, last), который больше значения, или last, если такой элемент не найден.

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

Читать полностью…

Senior C++ Developer

Проверяем, содержит ли строка только буквы в C++

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

Начиная с C++11, мы можем использовать std::regex_match для сопоставления последовательности с регулярным выражением.

Читать полностью…

Senior C++ Developer

🦾Хардкорный тест по языку С++🦾

📌Пройдите тест из 20 вопросов и проверьте, насколько вы готовы к обучению на углубленном курсе «C++ Developer. Professional» от OTUS.
Сможете сдать - пройдете на курс по спеццене!

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

🎫 Курс можно приобрести в рассрочку

➡️ Пройти тест и забрать welcome-скидку: https://otus.pw/xBYn/

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

Читать полностью…

Senior C++ Developer

Алгоритм gcd

Используется для нахождения НОД двух чисел. Он принимает два значения одного типа данных в качестве аргументов и возвращает их НОД.

Временная сложность: O(log(max(value1, value2)))).

Читать полностью…
Subscribe to a channel