TGViewer
Channel Public Channel
Senior C++ Developer

Senior C++ Developer

@seniorcpp

Изучаем C++.

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

РКН: https://www.gosuslugi.ru/snet/676e9a1e4e740947beca35ba
Subscribers
11.6K
Photos
1.5K
Videos
3
Links
640
Recent Posts 20 shown
Post #3288 678
malloc стал безопасен

В предыдущих версиях использование низкоуровневых функций, унаследованных из языка Си, не рекомендовалось. Проблема в том, что Си оперирует байтами, а в С++ происходит работа с объектами со своим временем жизни и областью видимости. До С++ 20 время жизни объекта начиналось после вызова оператора new. В новой версии все изменилось — принято считать, что набор низкоуровневых функций — memcpy, memmove, malloc, aligned_alloc, calloc, realloc, bit_cast, начинает время жизни объекта. Т. е. следующий код(см картинку) будет валиден.

Т. е. у нас появляется обратная совместимость с языком Си, но относительно С++ в новой трактовке.
Post #3287 761
Алгоритм copy_n

Используется для копирования элементов из одного контейнера в другой.
Post #3285 1.15K
#вопросы_с_собеседований
Как следует обрабатывать ошибки во время выполнения в C++?


— Ошибки выполнения в C++ можно обрабатывать с помощью исключений.
— Этот механизм обработки исключений в C++ разработан для обработки ошибок в программном обеспечении, состоящем из независимо разработанных компонентов, работающих в одном процессе и находящихся под синхронным управлением.
— Согласно C++, любая подпрограмма, которая не выполняет своего обещания, генерирует исключение. Вызывающий код, который знает, как обрабатывать эти исключения, может их перехватить.
Post #3284 1.21K
Проверка возможности конструирования элемента с набором конкретных параметров

Когда шаблонный класс задан в виде template<class T, typename... Args>, бывает трудно понять, какие аргументы можно использовать. Метод is_constructible из библиотеки type_traits даёт неполный ответ: он показывает, существует ли конструктор под конкретные аргументы. Для более полной картины можно использовать еще один шаблон.
Post #3283 1.13K
Post #3282 1.04K
🤖 Что происходит внутри ИИ-агента, когда он работает с корпоративными данными?

6 октября в Архитектурном клубе Яндекс 360 разберут системную архитектуру таких решений: оркестрацию, инструменты, память, наблюдаемость и управление автономностью.

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

🗓 6 октября, 17:00 МСК
💻 Онлайн, бесплатно

→ Зарегистрироваться на эфир
Post #3281 951
std::tie

std::tie — это функция, которая создает кортеж ссылок на lvalue из своих аргументов или экземпляров std::ignore.

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

В этом примере мы используем std::tie для распаковки результата вызова set_of_s.insert(value) в две переменные: итератор iter и логическую переменную inserted.
Это позволяет нам проверить, было ли значение успешно вставлено в набор.
Post #3280 933
constinit

constinit — это новый ключевое слово и спецификатор в C++20. Он используется для объявления переменных со статическим или потоковым временем хранения. Если переменная объявлена с constinit, ее инициализирующее объявление должно быть выполнено с constinit.
Если переменная, объявленная с constinit, имеет динамическую инициализацию (даже если она выполняется как статическая инициализация), программа является некорректной.

constinit гарантирует, что переменная инициализируется на этапе компиляции, и что статическая инициализация не может привести к проблемам с порядком инициализации. Однако он не делает переменную неизменяемой и не подразумевает const или constexpr. Однако constexpr подразумевает constinit.
Переменная может быть одновременно const и constinit, но не может быть одновременно constexpr и constinit.
Post #3279 874
Что общего у Алисы, автономного грузовика и поиска лекарств?

Все эти системы требуют сложного бэкенда.

На конференции «Я про бэкенд» 3 октября инженеры расскажут:
— как держать тысячи RPS на генеративных ответах Алисы;
— как обрабатывать 100+ ГБ/с в реальном времени с помощью YTsaurus Flow;
— как сделать агентную платформу надёжной;
— как работать с векторным поиском;
— как переживать отказы дата-центров;
— как обрабатывать до 1200 ГБ данных в час от автономного транспорта. 

А свою backend-задачу, связанную с архитектурой поисковых систем,  можно предложить уже сейчас — самую сложную из них выберут и решат в прямом эфире на конференции. 

3 октября · Москва + онлайн · бесплатно

Регистрация
Post #3278 757
#вопросы_с_собеседований
Можно ли выбрасывать exception из конструктора? Какие поля будут сконструированы, какие поля будут разрушены?

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

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

Важно помнить, что только те поля, которые были успешно сконструированы, будут разрушены. Если исключение выбрасывается в процессе конструирования поля, то это поле не будет разрушено, так как его конструктор не был успешно завершен.
Post #3277 841
Не отставайте от рынка — учитесь со скидкой 16%

Если чувствуете, что стоите на месте, и хотите освоить востребованную профессию, — сейчас хороший момент начать.

Потому что до 30 сентября на все курсы Практикума действует скидка 16%. 

Выбрать курс

Вы сможете:

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

Просто выберите курс, начните учиться бесплатно и получите скидку 16% — она автоматически появится в личном кабинете. 

Учиться!

Erid: 2SDnjdsaJNX
Название: ООО "ЯНДЕКС"
ИНН: 7736207543
Post #3276 999
Глубокое копирование

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

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

В этом примере у нас есть класс Deep, который содержит указатель data. В копирующем конструкторе мы создаем новый объект Deep, копируя значение, на которое указывает data в исходном объекте, а не сам указатель.
В функции main мы создаем объект obj1 и затем создаем obj2, используя копирующий конструктор. Затем мы меняем значение, на которое указывает data в obj2, и это не влияет на obj1, что подтверждает, что было выполнено глубокое копирование.
Post #3275 1.1K
Pure virtual function

Pure virtual function (чисто виртуальная функция) — это виртуальная функция, для которой мы можем иметь реализацию, но мы должны переопределить эту функцию в производном классе, иначе производный класс также станет абстрактным классом.
Чисто виртуальная функция объявляется путем присваивания в объявлении.

В этом примере у нас есть абстрактный базовый класс Shape, который содержит чисто виртуальную функцию draw(). Мы не можем создать объект класса Shape, так как он является абстрактным классом.
Затем мы создаем два производных класса Circle и Rectangle, которые переопределяют функцию draw().
В функции main() мы создаем объекты circle и rectangle, а также указатель на базовый класс Shape. Мы устанавливаем указатель на объекты circle и rectangle и вызываем функцию draw() для каждого из них.
Post #3274 1.18K
Ленивые вычисления в С++

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

Ленивые вычисления могут быть реализованы с использованием различных подходов, таких как отложенное вычисление (deferred evaluation), вычисление по требованию (on-demand evaluation) и мемоизация (memoization).

В этом примере вычисления выполняются только при первом обращении к числу Фибоначчи с определенным индексом, после чего результат сохраняется в контейнере memo для последующего использования. Это позволяет избежать повторных вычислений и оптимизировать производительность программы.
Post #3273 1.24K
#вопросы_с_собеседований
Как работает RTTI?

RTTI расшифровывается как "Run-Time Type Information" и является функцией в C++, которая предоставляет информацию о типе объекта во время выполнения. Она позволяет вам динамически запрашивать и манипулировать информацией о типе объекта.

В C++ информация о типе объектов обычно представлена механизмом, называемым классом type_info. Класс type_info является частью стандартной библиотеки C++ и определяется в заголовке <typeinfo>.

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

RTTI особенно полезен, когда у вас есть указатель на базовый класс или ссылка на объект производного класса. RTTI обеспечивает безопасную передачу указателя базового класса в производный класс и выполнение определенных операций. Для этого используется оператор dynamic_cast, который выполняет динамическое приведение и возвращает указатель или ссылку целевого типа, если приведение корректно, или нулевой указатель, или выбрасывает исключение, если приведение не удалось.
Post #3272 1.21K
Алгоритм partial_sort

Используется для сортировки не всего диапазона, а только его части.

Он переставляет элементы в диапазоне [first, last) таким образом, что элементы до середины сортируются в порядке возрастания, тогда как элементы после середины остаются без какого-либо определенного порядка.
Post #3271 1.34K
std::reference_wrapper

std::reference_wrapper — это класс в C++, предоставляемый стандартной библиотекой, который оборачивает ссылку на объект. Этот класс полезен, когда вам нужно передать или хранить ссылку на объект, но вы хотите избежать неявного копирования объекта.

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

#для_начинающих
Post #3270 1.34K
#вопросы_с_собеседований
Что будет выведено и почему?

Ответ:
4294967271, предполагая 32-битные целые числа.

Почему так происходит?

Существует иерархия: long double, double, float, unsigned long int, long int, unsigned int, int. И когда два операнда определены как 25u (unsigned int) и 50 (int), 50 также будет интерпретироваться как беззнаковое целое число, то есть 50u.

Кроме того, результат операции также будет иметь тип операндов. Следовательно, результат 25u - 50u и сам является беззнаковым целым числом. Таким образом, результат -25 преобразуется в 4294967271.
Post #3269 1.2K
Алгоритм reverse_copy

Алгоритм копирует элементы из заданного диапазона, но в обратном порядке.

Принимает три параметра. Первые два параметра — это диапазон копируемых элементов, а третий параметр — начальная точка, из которой элементы копируются в обратном порядке.
Older posts →

About this channel

How can I read @seniorcpp without a Telegram account?
TGViewer shows the public web preview Telegram publishes for Senior C++ Developer: recent posts, photos, videos and the subscriber count, with no app, login or account.
How many subscribers does Senior C++ Developer have?
Senior C++ Developer (@seniorcpp) has 11.6K subscribers on Telegram, refreshed roughly every 30 minutes.
Does Senior C++ Developer know I viewed it here?
No. Public channel previews carry no viewer identity, and TGViewer has no accounts or tracking of what you look up.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →