seniorcpp | Unsorted

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

13626

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

Subscribe to a channel

Senior C++ Developer

Как вывести форматированный текст на экран в C++

https://habr.com/ru/articles/748336/

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

Senior C++ Developer

Функция all_of

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

В приведенном выше коде отрицательный элемент -6 отрицает условие и возвращает false.

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

Senior C++ Developer

Инициализатор в if и switch

Вам должна понравиться такая возможность из С++17. Теперь вы можете выполнять инициализацию переменных и проверять условие внутри if или switch. Это даёт сделать код более лаконичным и чистым. Общая форма:

if (init-statement(x); condition(x)) {
// some code
}
else { // в else тоже видно x
// some more code
}

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

Senior C++ Developer

Кортежи

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

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

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

Senior C++ Developer

Алгоритм rotate

Меняет местами элементы в диапазоне [first, last) таким образом, что элемент n_first становится первым в новом диапазоне, а n_first-1 — последним.

Параметры:
first, last - диапазон элементов для изменения их порядка.
n_first - элемент, который должен стать первым в новом диапазоне.

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

Senior C++ Developer

➡️ Boost.MultiIndex — мощная библиотека для работы с контейнерами с множественной индексацией

Boost.MultiIndex — это часть популярной библиотеки Boost, которая предоставляет контейнеры с возможностью множественной индексации данных. Она позволяет хранить элементы в одном контейнере, но доступ к ним может осуществляться по разным критериям. Эта библиотека объединяет функциональность стандартных контейнеров, таких как std::set и std::map, в одном универсальном решении.

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

🔗 Ссылочка на доку

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

Senior C++ Developer

➡️ Оптимизация доступа к элементам через std::deque с использованием индексации

std::deque — это контейнер, который позволяет эффективное добавление и удаление элементов как с начала, так и с конца. В отличие от std::vector, std::deque обеспечивает постоянное время доступа к элементам как в начале, так и в конце контейнера.

Используйте std::deque в тех случаях, когда вам нужен быстрый доступ к элементам по индексу, но также важна возможность эффективного добавления и удаления элементов с обоих концов контейнера.

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

Senior C++ Developer

Давайте подведем итоги кода года. Хотим узнать, каким был ваш 2025

Вспомним дедлайны, обучение, прорывы и моменты, когда все получилось или не совсем. В канале T-Crew как раз разыгрывают мерч за такие истории.

Подписывайтесь и высказывайтесь

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

Senior C++ Developer

Функция none_of()

Эта функция возвращает true, если ни один из элементов не удовлетворяет данному условию, иначе возвращает false.

Поскольку все элементы положительны, функция возвращает true.

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

Senior C++ Developer

C++ для Maya

Создание кастомного локатора. В этой статье автор делится опытом, который приобрел при написании плагина на C++ для Maya.

Смотреть статью

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

Senior C++ Developer

#вопросы_с_собеседований
Как сгенерировать pure virtual function call исключение?

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

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

Senior C++ Developer

Можно ли в C++ умножать или делить целое значение на степени двойки, не используя операций "*" или "/"?

Это можно делать в любом языке, где есть побитовый сдвиг. Умножению значения x на 2, например, соответствует операция x << 1, а делению y на 4 - действие y >> 4.

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

Senior C++ Developer

👨‍💻Ошибки в памяти, утечки, неопределённое поведение — всё это неизбежная часть разработки на C++. Даже опытные инженеры порой тратят часы на поиск невидимых дефектов, которые ломают логику программы. Но есть инструменты, которые позволяют ловить такие баги ещё до того, как они попадут в прод.

На открытом уроке 9 декабря в 20:00 мск мы подробно разберём санитайзеры — инструменты, которые показывают, где и почему программа ведёт себя неправильно. Вы поймёте, как использовать их в реальных проектах, какие типы ошибок они находят и где проходят границы применимости.

Это полезно всем, кто пишет на C++. Санитайзеры — минимальный набор безопасности, который помогает не только отлавливать критические ошибки, но и формировать инженерную культуру «чистого» кода. Вы увидите, как всего одно включение инструмента даёт прозрачность, на которую обычно уходят недели отладки.

🚀Присоединяйтесь к открытому уроку в преддверие старта курса «C++ Developer»: https://otus.pw/Pd3Ot/

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

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

Senior C++ Developer

Как не ошибиться с выбором работы в бигтехе

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

В Яндекс Еде от этого страхует буткемп: новичок может попробовать поработать в разных командах, пощупать разные задачи и потом выбрать, где ему интереснее.

Олег Табота, руководитель команды общих компонентов в Яндекс Еде, написал классную статью, где разобрал весь этот процесс по полочкам.

Что внутри:
🔸 Современный C++ на userver: реальные задачи, а не скучная поддержка.
🔸 Инфраструктура: как сайдкары забирают на себя всю рутину в 200+ сервисах.
🔸 Право на ошибку: как реагирует команда, когда новичок роняет прод.

Рекомендуем почитать, чтобы узнать, как выстроены процессы в современном бигтехе.

🔗 Читать статью

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

Senior C++ Developer

std::weak_ordering

std::weak_ordering — это тип в C++, который введен в стандарте C++20 для использования в контексте трехсторонних операторов сравнения (таких как операторы <=> и ==). Этот тип предоставляет четыре значения: std::weak_ordering::equivalent, std::weak_ordering::less, std::weak_ordering::greater и std::weak_ordering::unordered.

std::weak_ordering используется для сравнения объектов, когда сравнение может быть неоднозначным или невозможным, но при этом необходимо учесть отношение порядка. Например, при сравнении чисел с плавающей точкой, если одно или оба числа являются NaN (Not a Number), то результат сравнения может быть неопределенным. В таких случаях std::weak_ordering может использоваться для предоставления информации о том, являются ли объекты эквивалентными, меньшими, большими или не сравнимыми.

#для_продвинутых

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

Senior C++ Developer

Различие локальной переменной и поля класса с одинаковым именем

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

void set(int x) { this->x = x; }

Здесь в методе set мы присваиваем полю класса x значение локальной переменной this. Чтобы различить поле класса x и локальную переменную с тем же именем мы используем запись this->x при обращении к полю класса.

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

Senior C++ Developer

#вопросы_с_собеседований
Что за оператор −−> в С++?

Это старый хитрый вопрос. В С++ нет оператора −−>.

Рассмотрим такой код:

if (p−−>m == 0) f(p);

Выглядит так, как будто и правда есть оператор −−>, и если правильно объявить переменные p и m, то код даже скомпилируется и запустится:

int p = 2;
int m = 0;
if (p−−>m == 0) f(p);


Это означает: если p−− больше чем m (а это так), то надо сравнить результат (true) с нулём. Ну, true != 0, так что результат всего выражения — false, и функция f() не вызовется. Другими словами:

if ((p−−) > m == 0) f(p);

Пожалуйста, не тратьте много времени на подобные вопросы. Они сбивали с толку новичков ещё до того, как появился С++.

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

Senior C++ Developer

SFINAE (Substitution Failure Is Not An Error)

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

В этом примере функция my_function будет компилироваться только для типов данных, которые являются целочисленными. Если мы передадим в функцию строку, то компиляция завершится неудачей, потому что std::enable_if_t не сможет замениться на допустимый тип.

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

Senior C++ Developer

Изучение физического движка Bullet Physics. Часть 2. Примеры

Смотреть статью

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

Senior C++ Developer

Как в С++ обрабатывать ошибки в конструкторах без исключений?

Самый очевидный способ обработки ошибок — это возврат значений. Но конструкторы не возвращают значения, поэтому так поступить нельзя. Это и было одной из причин, по которой исключения появились в С++.

Смотреть статью

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

Senior C++ Developer

➡️ Оптимизация работы с большими объектами с помощью std::move и семантики перемещения

std::move — это функция, которая превращает объект в "rvalue" (правостороннее значение), позволяя использовать семантику перемещения вместо копирования. Это особенно полезно при работе с большими объектами, где копирование может быть дорогим.

В этом примере используется std::move, чтобы передать большой объект LargeObject в функцию processLargeObject с использованием семантики перемещения. Вместо дорогостоящего копирования большого массива, память просто передается новому объекту, что значительно улучшает производительность.

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

Senior C++ Developer

➡️ Библиотека SQLiteCpp

SQLiteCpp — это тонкая обертка вокруг SQLite, одной из самых популярных легковесных реляционных баз данных. Библиотека предоставляет удобный и безопасный интерфейс для работы с SQLite в C++, облегчая взаимодействие с базами данных.

Если вам нужно встроить простую, но мощную базу данных в ваше C++ приложение, SQLiteCpp — это то, что вам нужно.

🔗 Ссылочка на доку

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

Senior C++ Developer

Спецификатор thread_local

Спецификатор thread_local позволяет создавать переменные, которые будут иметь своё значение для каждого потока, в который они будут загружены. То есть, каждый поток будет иметь свою собственную копию этой переменной.

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

В данном примере мы создали переменную x с помощью спецификатора thread_local. Затем мы создали функцию increment(), которая инкрементирует значение переменной x и выводит его на экран.

В функции main() мы создали два потока и передали им функцию increment(). Каждый поток будет иметь свою собственную копию переменной x, поэтому при выполнении функции increment() в каждом потоке будет изменяться только своя копия переменной x. После выполнения обоих потоков мы ожидаем завершения их работы с помощью метода join().

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

Senior C++ Developer

🎯 В C++ вызываемый объект — это намного больше, чем “функция”. За тридцать лет язык прошёл путь от простых указателей до мощных лямбда-выражений, которые лежат в основе современного параллелизма, асинхронности, алгоритмов и гибких архитектур.

На открытом уроке 18 декабря в 20:00 мск вы увидите эволюцию callable-подходов во всей широте: от function pointers и функторов до std::bind, std::function и современных лямбд. Разберёмся, что происходит «под капотом», как выбирать подходящий инструмент и почему именно лямбды стали стандартом промышленного C++.

Такой разбор особенно полезен тем, кто хочет писать более выразимый, модульный и безопасный код. Понимание callable-моделей даёт гибкость: проще проектировать API, реализовывать callback-механику, строить асинхронность, оптимизировать архитектуру приложения и мыслить “по-современному”.

⚡️Присоединяйтесь к открытому уроку в преддверие старта курса «C++ Developer» — получите базу, на которой строятся потоки исполнения, асинхронные модели и ключевые элементы современного C++20/23: https://otus.pw/Eodo/

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

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

Senior C++ Developer

Bitset

Bitset — это контейнер в C ++ Standard Library Library для работы с данными на битовом уровне.

Набор битов хранит биты (элементы только с двумя возможными значениями: 0 или 1). Тем не менее, мы можем получить часть строки, предоставив позиции конструктору bitset (позиции относятся к позиции строки слева направо).

Подробнее можно почитать здесь.

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

Senior C++ Developer

Плюсовики, собираемся 15 декабря в Москве и онлайн на встречу РГ21 С++

Ивент для практикующих C++-разработчиков и энтузиастов, которые хотят понимать, куда движется язык, и участвовать в его развитии.

Антон Полухин (Техплатформа Городских сервисов Яндекса) поделится новостями со встречи международного Комитета по стандартизации языка C++ — о прогрессе в работе над С++26, новинках и о том, какие комментарии к стандарту подготовила Россия.

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

Подробности и регистрация

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

Senior C++ Developer

Перегрузка операторов

Ключевое слово operator позволяет изменить работу конкретного оператора с экземплярами класса. Это дает оператору дополнительное значение — "перегружает" его. Компилятор различает разные значения оператора, проверяя типы его операндов.

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

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

Senior C++ Developer

#вопросы_с_собеседований
Что выведет код сверху?

Ответ:
10
Объяснение:
Подобно struct и class, union может иметь методы. Подобно struct и в отличие от class, члены union по умолчанию являются общедоступными.

Поскольку данные-члены объединения совместно используют память, значение b становится таким же, как a.

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

Senior C++ Developer

Пространство имен

Пространство имен (namespace) в C++ представляет собой механизм для организации кода и предотвращения конфликтов имен (например, имен переменных, функций и т.д.). Пространства имен помогают разделить глобальное пространство имен на более узкие области, что улучшает читаемость кода и поддерживает его структурирование.

В этом примере MyNamespace — это пространство имен, которое содержит функцию myFunction. Чтобы вызвать функцию из этого пространства имен, используется оператор разрешения области ::.

#для_начинающих

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

Senior C++ Developer

Что такое stack overflow?

stack overflow (переполнение стека) — это программная ошибка, которая возникает, когда программа пытается использовать больше памяти на стеке, чем доступно. Стэк — это область памяти, используемая для хранения локальной информации функций, таких как параметры, локальные переменные и возвращаемые значения.

Когда функция вызывается, ее адрес возврата сохраняется на стеке. Затем, когда функция завершается, ее адрес возврата восстанавливается из стека, и управление передается следующей функции в стеке вызовов.

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

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