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 может использоваться для предоставления информации о том, являются ли объекты эквивалентными, меньшими, большими или не сравнимыми.#для_продвинутых
Пространство имен
Пространство имен (namespace) в C++ представляет собой механизм для организации кода и предотвращения конфликтов имен (например, имен переменных, функций и т.д.). Пространства имен помогают разделить глобальное пространство имен на более узкие области, что улучшает читаемость кода и поддерживает его структурирование.
В этом примере
#для_начинающих
Пространство имен (namespace) в C++ представляет собой механизм для организации кода и предотвращения конфликтов имен (например, имен переменных, функций и т.д.). Пространства имен помогают разделить глобальное пространство имен на более узкие области, что улучшает читаемость кода и поддерживает его структурирование.
В этом примере
MyNamespace — это пространство имен, которое содержит функцию myFunction. Чтобы вызвать функцию из этого пространства имен, используется оператор разрешения области ::.#для_начинающих
Как не ошибиться с выбором работы в бигтехе
Выбирать компанию и проект, с которыми хочется работать, — тот ещё квест. Всегда есть риск попасть на поддержку древнего легаси вместо интересного хайлоада.
В Яндекс Еде от этого страхует буткемп: новичок может попробовать поработать в разных командах, пощупать разные задачи и потом выбрать, где ему интереснее.
Олег Табота, руководитель команды общих компонентов в Яндекс Еде, написал классную статью, где разобрал весь этот процесс по полочкам.
Что внутри:
🔸 Современный C++ на userver: реальные задачи, а не скучная поддержка.
🔸 Инфраструктура: как сайдкары забирают на себя всю рутину в 200+ сервисах.
🔸 Право на ошибку: как реагирует команда, когда новичок роняет прод.
Рекомендуем почитать, чтобы узнать, как выстроены процессы в современном бигтехе.
🔗 Читать статью
Выбирать компанию и проект, с которыми хочется работать, — тот ещё квест. Всегда есть риск попасть на поддержку древнего легаси вместо интересного хайлоада.
В Яндекс Еде от этого страхует буткемп: новичок может попробовать поработать в разных командах, пощупать разные задачи и потом выбрать, где ему интереснее.
Олег Табота, руководитель команды общих компонентов в Яндекс Еде, написал классную статью, где разобрал весь этот процесс по полочкам.
Что внутри:
🔸 Современный C++ на userver: реальные задачи, а не скучная поддержка.
🔸 Инфраструктура: как сайдкары забирают на себя всю рутину в 200+ сервисах.
🔸 Право на ошибку: как реагирует команда, когда новичок роняет прод.
Рекомендуем почитать, чтобы узнать, как выстроены процессы в современном бигтехе.
🔗 Читать статью
#вопросы_с_собеседований
Что выведет код сверху?
Ответ:
10
Объяснение:
Подобно struct и class, union может иметь методы. Подобно struct и в отличие от class, члены union по умолчанию являются общедоступными.
Поскольку данные-члены объединения совместно используют память, значение b становится таким же, как a.
Что выведет код сверху?
Ответ:
Объяснение:
Подобно struct и class, union может иметь методы. Подобно struct и в отличие от class, члены union по умолчанию являются общедоступными.
Поскольку данные-члены объединения совместно используют память, значение b становится таким же, как a.
👨💻Ошибки в памяти, утечки, неопределённое поведение — всё это неизбежная часть разработки на C++. Даже опытные инженеры порой тратят часы на поиск невидимых дефектов, которые ломают логику программы. Но есть инструменты, которые позволяют ловить такие баги ещё до того, как они попадут в прод.
На открытом уроке 9 декабря в 20:00 мск мы подробно разберём санитайзеры — инструменты, которые показывают, где и почему программа ведёт себя неправильно. Вы поймёте, как использовать их в реальных проектах, какие типы ошибок они находят и где проходят границы применимости.
Это полезно всем, кто пишет на C++. Санитайзеры — минимальный набор безопасности, который помогает не только отлавливать критические ошибки, но и формировать инженерную культуру «чистого» кода. Вы увидите, как всего одно включение инструмента даёт прозрачность, на которую обычно уходят недели отладки.
🚀Присоединяйтесь к открытому уроку в преддверие старта курса «C++ Developer»: https://otus.pw/Pd3Ot/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
На открытом уроке 9 декабря в 20:00 мск мы подробно разберём санитайзеры — инструменты, которые показывают, где и почему программа ведёт себя неправильно. Вы поймёте, как использовать их в реальных проектах, какие типы ошибок они находят и где проходят границы применимости.
Это полезно всем, кто пишет на C++. Санитайзеры — минимальный набор безопасности, который помогает не только отлавливать критические ошибки, но и формировать инженерную культуру «чистого» кода. Вы увидите, как всего одно включение инструмента даёт прозрачность, на которую обычно уходят недели отладки.
🚀Присоединяйтесь к открытому уроку в преддверие старта курса «C++ Developer»: https://otus.pw/Pd3Ot/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Перегрузка операторов
Ключевое слово operator позволяет изменить работу конкретного оператора с экземплярами класса. Это дает оператору дополнительное значение — "перегружает" его. Компилятор различает разные значения оператора, проверяя типы его операндов.
В примере оператор + перегружается для сложения двух комплексных чисел.
Ключевое слово operator позволяет изменить работу конкретного оператора с экземплярами класса. Это дает оператору дополнительное значение — "перегружает" его. Компилятор различает разные значения оператора, проверяя типы его операндов.
В примере оператор + перегружается для сложения двух комплексных чисел.
Плюсовики, собираемся 15 декабря в Москве и онлайн на встречу РГ21 С++
Ивент для практикующих C++-разработчиков и энтузиастов, которые хотят понимать, куда движется язык, и участвовать в его развитии.
Антон Полухин (Техплатформа Городских сервисов Яндекса) поделится новостями со встречи международного Комитета по стандартизации языка C++ — о прогрессе в работе над С++26, новинках и о том, какие комментарии к стандарту подготовила Россия.
На встрече вы узнаете, как именно российским разработчикам участвовать в развитии стандарта языка, сможете задать свои вопросы спикеру и обменяться мнениями с коллегами.
Подробности и регистрация
Ивент для практикующих C++-разработчиков и энтузиастов, которые хотят понимать, куда движется язык, и участвовать в его развитии.
Антон Полухин (Техплатформа Городских сервисов Яндекса) поделится новостями со встречи международного Комитета по стандартизации языка C++ — о прогрессе в работе над С++26, новинках и о том, какие комментарии к стандарту подготовила Россия.
На встрече вы узнаете, как именно российским разработчикам участвовать в развитии стандарта языка, сможете задать свои вопросы спикеру и обменяться мнениями с коллегами.
Подробности и регистрация
#вопросы_с_собеседований
Как сгенерировать pure virtual function call исключение?
Ответ:
Нужно вызвать чисто виртуальный метод в конструкторе родительского класса т.е. до создания дочернего, в котором этот метод реализован. Т.к. современный компилятор не даст это сделать напрямую, то нужно будет использовать промежуточный метод.
Как сгенерировать pure virtual function call исключение?
Ответ:
Нужно вызвать чисто виртуальный метод в конструкторе родительского класса т.е. до создания дочернего, в котором этот метод реализован. Т.к. современный компилятор не даст это сделать напрямую, то нужно будет использовать промежуточный метод.
Bitset
Bitset — это контейнер в C ++ Standard Library Library для работы с данными на битовом уровне.
Набор битов хранит биты (элементы только с двумя возможными значениями: 0 или 1). Тем не менее, мы можем получить часть строки, предоставив позиции конструктору bitset (позиции относятся к позиции строки слева направо).
Подробнее можно почитать здесь.
Bitset — это контейнер в C ++ Standard Library Library для работы с данными на битовом уровне.
Набор битов хранит биты (элементы только с двумя возможными значениями: 0 или 1). Тем не менее, мы можем получить часть строки, предоставив позиции конструктору bitset (позиции относятся к позиции строки слева направо).
Подробнее можно почитать здесь.
C++ для Maya
Создание кастомного локатора. В этой статье автор делится опытом, который приобрел при написании плагина на C++ для Maya.
Смотреть статью
Создание кастомного локатора. В этой статье автор делится опытом, который приобрел при написании плагина на C++ для Maya.
Смотреть статью
Хабр
C++ для Maya
Создание кастомного локатора Внимание! Данной статья не является туториалом, а служит для передачи моего опыта и наработками. В этой статье я хочу поделиться тем опытом, который приобрел при написании...
🎯 В 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
На открытом уроке 18 декабря в 20:00 мск вы увидите эволюцию callable-подходов во всей широте: от function pointers и функторов до std::bind, std::function и современных лямбд. Разберёмся, что происходит «под капотом», как выбирать подходящий инструмент и почему именно лямбды стали стандартом промышленного C++.
Такой разбор особенно полезен тем, кто хочет писать более выразимый, модульный и безопасный код. Понимание callable-моделей даёт гибкость: проще проектировать API, реализовывать callback-механику, строить асинхронность, оптимизировать архитектуру приложения и мыслить “по-современному”.
⚡️Присоединяйтесь к открытому уроку в преддверие старта курса «C++ Developer» — получите базу, на которой строятся потоки исполнения, асинхронные модели и ключевые элементы современного C++20/23: https://otus.pw/Eodo/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Спецификатор thread_local
Спецификатор
Это может быть полезным в ситуациях, когда необходимо иметь глобальную переменную, доступную для каждого потока, но значение этой переменной должно быть уникальным для каждого потока.
В данном примере мы создали переменную
В функции
Спецификатор
thread_local позволяет создавать переменные, которые будут иметь своё значение для каждого потока, в который они будут загружены. То есть, каждый поток будет иметь свою собственную копию этой переменной.Это может быть полезным в ситуациях, когда необходимо иметь глобальную переменную, доступную для каждого потока, но значение этой переменной должно быть уникальным для каждого потока.
В данном примере мы создали переменную
x с помощью спецификатора thread_local. Затем мы создали функцию increment(), которая инкрементирует значение переменной x и выводит его на экран.В функции
main() мы создали два потока и передали им функцию increment(). Каждый поток будет иметь свою собственную копию переменной x, поэтому при выполнении функции increment() в каждом потоке будет изменяться только своя копия переменной x. После выполнения обоих потоков мы ожидаем завершения их работы с помощью метода join().Давайте подведем итоги кода года. Хотим узнать, каким был ваш 2025
Вспомним дедлайны, обучение, прорывы и моменты, когда все получилось или не совсем. В канале T-Crew как раз разыгрывают мерч за такие истории.
Подписывайтесь и высказывайтесь
Вспомним дедлайны, обучение, прорывы и моменты, когда все получилось или не совсем. В канале T-Crew как раз разыгрывают мерч за такие истории.
Подписывайтесь и высказывайтесь
SQLiteCpp — это тонкая обертка вокруг SQLite, одной из самых популярных легковесных реляционных баз данных. Библиотека предоставляет удобный и безопасный интерфейс для работы с SQLite в C++, облегчая взаимодействие с базами данных.
• Если вам нужно встроить простую, но мощную базу данных в ваше C++ приложение, SQLiteCpp — это то, что вам нужно.Please open Telegram to view this post
VIEW IN TELEGRAM