Автогенерируемый оператор равенства
Вы можете определить оператор трехстороннего сравнения или запросить его у компилятора с помощью =default. Но знаете ли вы, что в C++20 можно также определить или запросить оператор равенства?
https://modernescpp.com/index.php/the-autogenerated-equality-operator/
#cpp #programming
👉 @cpp_lib
Вы можете определить оператор трехстороннего сравнения или запросить его у компилятора с помощью =default. Но знаете ли вы, что в C++20 можно также определить или запросить оператор равенства?
https://modernescpp.com/index.php/the-autogenerated-equality-operator/
#cpp #programming
👉 @cpp_lib
⚡1👍1
Создание своего терминала на C++ и Qt
Сегодня мы создадим свой собственный терминал на языке программирования C++. Я являюсь фанатом Linux, и пользуюсь минималистичными терминальными программами — от Vim как IDE до чатов. Есть множество терминалов, у каждого из них есть плюсы и минусы. Наш терминал не будет претендовать на место серьезного проекта, но если вы хотите улучшить код, который мы сегодня напишем — то вы молодцы, можете без проблем развить наш терминал.
Это будет небольшой, минималистичный терминал для Linux. Он будет на основе фреймворка Qt 5 и библиотеки qtermwidget5
Не буду долго тянуть, вперед! Исходный код будет в моем репозитории.
https://habr.com/ru/articles/776716/
#cpp #programming
👉 @cpp_lib
Сегодня мы создадим свой собственный терминал на языке программирования C++. Я являюсь фанатом Linux, и пользуюсь минималистичными терминальными программами — от Vim как IDE до чатов. Есть множество терминалов, у каждого из них есть плюсы и минусы. Наш терминал не будет претендовать на место серьезного проекта, но если вы хотите улучшить код, который мы сегодня напишем — то вы молодцы, можете без проблем развить наш терминал.
Это будет небольшой, минималистичный терминал для Linux. Он будет на основе фреймворка Qt 5 и библиотеки qtermwidget5
Не буду долго тянуть, вперед! Исходный код будет в моем репозитории.
https://habr.com/ru/articles/776716/
#cpp #programming
👉 @cpp_lib
👍3⚡1❤1
Фильтруем логи санитайзеров и valgrind на примере приложения с Qt
Периодически встречающаяся проблемами кода на С и C++ являются утечки памяти и неопределенное поведение. Даже если вы используете умные указатели, то от ошибок в библиотеках сторонних разработчиков вы не застрахованы. Для поиска ошибок в коде существуют специальные инструменты:
санитайзеры;
valgrind.
https://habr.com/ru/companies/stc_spb/articles/776528/
#cpp #programming
👉 @cpp_lib
Периодически встречающаяся проблемами кода на С и C++ являются утечки памяти и неопределенное поведение. Даже если вы используете умные указатели, то от ошибок в библиотеках сторонних разработчиков вы не застрахованы. Для поиска ошибок в коде существуют специальные инструменты:
санитайзеры;
valgrind.
https://habr.com/ru/companies/stc_spb/articles/776528/
#cpp #programming
👉 @cpp_lib
Хабр
Фильтруем логи санитайзеров и valgrind на примере приложения с Qt
Мотивация Периодически встречающимися проблемами кода на С и C++ являются утечки памяти и неопределенное поведение. Даже если вы используете умные указатели, то от ошибок в библиотеках сторонних...
👍2⚡1
Рассказы о SObjectizer. Работа с командами
Мы только что познакомились с Лукасом, коллегой, которому необходимо запечатлеть определенные моменты с помощью своей камеры. Что, если бы мы могли по взмаху виртуальной палочки приказывать устройству запускать и останавливать съемку?
Лукас приводит пример использования:
Я запускаю программу, и она ничего не делает;
В какой-то момент я решаю запустить веб-камеру, нажав на кнопку или крикнув "Alexa, включи веб-камеру". Я ожидаю, что в этот момент начнется поток кадров;
Я делаю забавное лицо в течение некоторого времени, затем решаю каким-то образом остановиться, и программа должна вернуться в состояние ожидания;
может быть, я хочу сделать это снова, и снова, и снова...
https://dev.to/ilpropheta/sobjectizer-tales-4-handling-commands-3jbb
#cpp #programming
👉 @cpp_lib
Мы только что познакомились с Лукасом, коллегой, которому необходимо запечатлеть определенные моменты с помощью своей камеры. Что, если бы мы могли по взмаху виртуальной палочки приказывать устройству запускать и останавливать съемку?
Лукас приводит пример использования:
Я запускаю программу, и она ничего не делает;
В какой-то момент я решаю запустить веб-камеру, нажав на кнопку или крикнув "Alexa, включи веб-камеру". Я ожидаю, что в этот момент начнется поток кадров;
Я делаю забавное лицо в течение некоторого времени, затем решаю каким-то образом остановиться, и программа должна вернуться в состояние ожидания;
может быть, я хочу сделать это снова, и снова, и снова...
https://dev.to/ilpropheta/sobjectizer-tales-4-handling-commands-3jbb
#cpp #programming
👉 @cpp_lib
👍2🔥2⚡1
Объединение интервалов в C++ нового поколения
Несколько недель назад я задал эту задачу на Coding Gym: задайте массив интервалов, где intervals[i] = [starti, endi], объедините все пересекающиеся интервалы и верните массив непересекающихся интервалов, которые покрывают все интервалы на входе.
Вот пример:
https://marcoarena.wordpress.com/2023/03/08/merging-intervals-in-next-gen-cpp/
#cpp #programming
👉 @cpp_lib
Несколько недель назад я задал эту задачу на Coding Gym: задайте массив интервалов, где intervals[i] = [starti, endi], объедините все пересекающиеся интервалы и верните массив непересекающихся интервалов, которые покрывают все интервалы на входе.
Вот пример:
Input: intervals = [[1,3],[2,6],[8,10],[15,18]]
Output: [[1,6],[8,10],[15,18]]
Explanation: Since intervals [1,3] and [2,6] overlap, merge them into [1,6].
https://marcoarena.wordpress.com/2023/03/08/merging-intervals-in-next-gen-cpp/
#cpp #programming
👉 @cpp_lib
Growing up
Merging intervals in next-gen C++
Revisiting a classical programming puzzle in next generation C++.
👍3⚡1
При обработке строк потоки в C++ могут быть медленными
Библиотека C++ уже давно организована вокруг классов потоков, по крайней мере, когда речь идет о чтении и разборе строк. Но потоки могут быть удивительно медленными. Например, если вам нужно разобрать числа, то эта процедура C++ близка к тому, чтобы стать худшим выбором с точки зрения производительности:
https://lemire.me/blog/2023/10/19/for-processing-strings-streams-in-c-can-be-slow/
#cpp #programming
👉 @cpp_lib
Библиотека C++ уже давно организована вокруг классов потоков, по крайней мере, когда речь идет о чтении и разборе строк. Но потоки могут быть удивительно медленными. Например, если вам нужно разобрать числа, то эта процедура C++ близка к тому, чтобы стать худшим выбором с точки зрения производительности:
std::stringstream in(mystring);
while(in >> x) {
sum += x;
}
return sum;
https://lemire.me/blog/2023/10/19/for-processing-strings-streams-in-c-can-be-slow/
#cpp #programming
👉 @cpp_lib
⚡2👍2👏1🤔1
Шпаргалки и инфографика по C++
https://hackingcpp.com/cpp/cheat_sheets.html
#cpp #programming
👉 @cpp_lib
https://hackingcpp.com/cpp/cheat_sheets.html
#cpp #programming
👉 @cpp_lib
🔥7⚡1👍1
Разработка кросплатформенного приложения на Qt с использованием нейросетей, обученных на tensorflow
Раз уж Вы заинтересовались данной статьёй, то ожидается, что Вы умеете программировать на с++ с использованием библиотеки Qt и разрабатывать нейросети на Python c использованием библиотеки tensorflow.
Соответственно остаётся только понять как использовать обученные Вами нейросетевые модели в Qt проектах.
https://habr.com/ru/articles/719888/
#cpp #programming
👉 @cpp_lib
Раз уж Вы заинтересовались данной статьёй, то ожидается, что Вы умеете программировать на с++ с использованием библиотеки Qt и разрабатывать нейросети на Python c использованием библиотеки tensorflow.
Соответственно остаётся только понять как использовать обученные Вами нейросетевые модели в Qt проектах.
https://habr.com/ru/articles/719888/
#cpp #programming
👉 @cpp_lib
Хабр
Разработка кросплатформенного приложения на Qt с использованием нейросетей, обученных на tensorflow
Раз уж Вы заинтересовались данной статьёй, то ожидается, что Вы умеете программировать на с++ с использованием библиотеки Qt и разрабатывать нейросети на Python c использованием библиотеки tensorflow....
👍5⚡1🤔1
Память как у пингвина: Работа памяти в Linux
Начнем издалека. В спецификации любого компьютера и в частности сервера непременно числится надпись "N гигабайт оперативной памяти" - именно столько в его распоряжении находится физической памяти.
Задача распределения доступных ресурсов между исполняемым программным обеспечением, в том числе и физической памяти, лежит на плечах операционной системы, в нашем случае Linux. Для обеспечения иллюзии полной независимости, она предоставляет каждой из программ свое независимое виртуальное адресное пространство и низкоуровневый интерфейс работы с ним. Это избавляет их от необходимости знать друг о друге, размере доступной физической памяти и текущей её занятости. Адреса в виртуальном пространстве процессов называют логическими.
Для отслеживания соответствия между физической и виртуальной памятью ядро Linux использует иерархический набор структур данных в своей служебной области физической памяти (только оно работает с ней напрямую), а также специализированные аппаратные контуры, которые в совокупности называют MMU.
Следить за каждым байтом памяти в отдельности было бы накладно, по-этому ядро оперирует достаточно большими блоками памяти - страницами, типовой размер которых составляет 4 килобайта.
https://habr.com/ru/articles/777250/
#cpp #programming
👉 @cpp_lib
Начнем издалека. В спецификации любого компьютера и в частности сервера непременно числится надпись "N гигабайт оперативной памяти" - именно столько в его распоряжении находится физической памяти.
Задача распределения доступных ресурсов между исполняемым программным обеспечением, в том числе и физической памяти, лежит на плечах операционной системы, в нашем случае Linux. Для обеспечения иллюзии полной независимости, она предоставляет каждой из программ свое независимое виртуальное адресное пространство и низкоуровневый интерфейс работы с ним. Это избавляет их от необходимости знать друг о друге, размере доступной физической памяти и текущей её занятости. Адреса в виртуальном пространстве процессов называют логическими.
Для отслеживания соответствия между физической и виртуальной памятью ядро Linux использует иерархический набор структур данных в своей служебной области физической памяти (только оно работает с ней напрямую), а также специализированные аппаратные контуры, которые в совокупности называют MMU.
Следить за каждым байтом памяти в отдельности было бы накладно, по-этому ядро оперирует достаточно большими блоками памяти - страницами, типовой размер которых составляет 4 килобайта.
https://habr.com/ru/articles/777250/
#cpp #programming
👉 @cpp_lib
👍4⚡1
Запускаем управление файлами метаданных
Пакет C или C++ обычно состоит из нескольких артефактов C и C++, заголовков, скомпилированных библиотек и исполняемых файлов. Но есть и другие файлы, которые могут быть не нужны для обычного использования такого пакета, но которые могут быть очень важны по техническим или деловым причинам, например, для регулирования, соответствия, безопасности, воспроизводимости и отслеживаемости. Вот некоторые примеры:
Полные журналы сборки
Исполняемые файлы тестов
Результаты выполнения набора тестов
Артефакты отладки, такие как тяжелые файлы .pdb.
Результаты анализа покрытий, санитайзеров или других инструментов анализа исходного кода или бинарных файлов
Контекст и метаданные о сборке, точная машина, окружение, автор, данные CI
Другие файлы, связанные с соблюдением требований и безопасностью
https://blog.conan.io/2023/10/24/Conan-launches-metadata-files.html
#cpp #programming
👉 @cpp_lib
Пакет C или C++ обычно состоит из нескольких артефактов C и C++, заголовков, скомпилированных библиотек и исполняемых файлов. Но есть и другие файлы, которые могут быть не нужны для обычного использования такого пакета, но которые могут быть очень важны по техническим или деловым причинам, например, для регулирования, соответствия, безопасности, воспроизводимости и отслеживаемости. Вот некоторые примеры:
Полные журналы сборки
Исполняемые файлы тестов
Результаты выполнения набора тестов
Артефакты отладки, такие как тяжелые файлы .pdb.
Результаты анализа покрытий, санитайзеров или других инструментов анализа исходного кода или бинарных файлов
Контекст и метаданные о сборке, точная машина, окружение, автор, данные CI
Другие файлы, связанные с соблюдением требований и безопасностью
https://blog.conan.io/2023/10/24/Conan-launches-metadata-files.html
#cpp #programming
👉 @cpp_lib
⚡3👍2
Этот пост о том небольшом дополнении, которым мы можем снабдить builder-классы
Я согласен с Клаусом Иглбергером, который призвал говорить о дизайне программного обеспечения на Meeting C++ 2022. Этот пост - всего лишь маленький вклад в это дело.
https://marcoarena.wordpress.com/2023/01/31/the-toggle-builder/
#cpp #programming
👉 @cpp_lib
Я согласен с Клаусом Иглбергером, который призвал говорить о дизайне программного обеспечения на Meeting C++ 2022. Этот пост - всего лишь маленький вклад в это дело.
https://marcoarena.wordpress.com/2023/01/31/the-toggle-builder/
#cpp #programming
👉 @cpp_lib
Growing up
The Toggle Builder
This post is about that little extra we might equip builder classes with. I am with Klaus Iglberger that called for talking about software design at Meeting C++ 2022. This post is just a weeny cont…
⚡3👍2
Пишем свой собственный текстовый редактор
Это инструкция, которая покажет вам, как создать текстовый редактор на языке C.
Текстовый редактор представляет собой kilo от antirez, с некоторыми изменениями. Это около 1000 строк языка C в одном файле без зависимостей, и в нем реализованы все основные функции, которые вы ожидаете от минимального редактора, а также подсветка синтаксиса и функция поиска.
В этой инструкции вы пройдете путь создания редактора в 184 шага. На каждом шаге вы будете добавлять, изменять или удалять несколько строк кода. На большинстве шагов вы сможете наблюдать за внесенными изменениями, скомпилировав и запустив программу сразу после этого.
https://viewsourcecode.org/snaptoken/kilo/index.html
#cpp #programming
👉 @cpp_lib
Это инструкция, которая покажет вам, как создать текстовый редактор на языке C.
Текстовый редактор представляет собой kilo от antirez, с некоторыми изменениями. Это около 1000 строк языка C в одном файле без зависимостей, и в нем реализованы все основные функции, которые вы ожидаете от минимального редактора, а также подсветка синтаксиса и функция поиска.
В этой инструкции вы пройдете путь создания редактора в 184 шага. На каждом шаге вы будете добавлять, изменять или удалять несколько строк кода. На большинстве шагов вы сможете наблюдать за внесенными изменениями, скомпилировав и запустив программу сразу после этого.
https://viewsourcecode.org/snaptoken/kilo/index.html
#cpp #programming
👉 @cpp_lib
❤🔥6👍3⚡1
Что нам недодали в C++
Уже более десяти лет я профессионально занимаюсь C++ разработкой. Я вошел в профессию 2013 году, в самый момент, когда комитет по стандартизации языка C++ раскочегарился и встал на рельсы трехлетних релизов обновленных стандартов языка. Уже был выпущен C++11, в котором была введена куча самых заманчивых новшеств, существенно освеживших язык. Однако, далеко не каждому была доступна роскошь использовать все эти нововведения в рабочем коде, и приходилось сидеть на унылом C++03, облизываясь на новый стандарт.
Вместе с тем, несмотря на все разнообразие новых фич, внедряющихся в язык, я от проекта к проекту наблюдал и поныне наблюдаю одну и ту же повторяющуюся картину: helper-файлы, helper-контейнеры, в которых зачастую реализуются одни и те же вещи, восполняющие то, чего нет в STL. Я не говорю о каких-то узкоспециализированных специфических структурах и алгоритмах — скорее о вещах, без которых не получается комфортно разрабатывать программный продукт на C++. И я вижу, как разные компании на различных проектах сооружают одни и те же самопальные решения, просто потому что они естественны, и на них есть спрос. А предложение отсутствует, по крайней мере в STL.
В статье я хотел собрать самые яркие примеры того, что видел и использовал в разработке. Но в процессе сбора всех отсутствующих из коробки в C++ фич, внезапно для себя обнаружил, что часть из них уже покрыта новыми стандартами языка, полностью или частично. Поэтому данная статья — скорее некая рефлексия и книга жалоб о том, чего не было очень долго, но оно в итоге пришло в язык; и о том, что все еще отсутствует в стандарте. Статья не претендует ни на что, скорее просто поболтать о повседневном C++.
https://habr.com/ru/articles/786582/
#cpp #programming
👉 @cpp_lib
Уже более десяти лет я профессионально занимаюсь C++ разработкой. Я вошел в профессию 2013 году, в самый момент, когда комитет по стандартизации языка C++ раскочегарился и встал на рельсы трехлетних релизов обновленных стандартов языка. Уже был выпущен C++11, в котором была введена куча самых заманчивых новшеств, существенно освеживших язык. Однако, далеко не каждому была доступна роскошь использовать все эти нововведения в рабочем коде, и приходилось сидеть на унылом C++03, облизываясь на новый стандарт.
Вместе с тем, несмотря на все разнообразие новых фич, внедряющихся в язык, я от проекта к проекту наблюдал и поныне наблюдаю одну и ту же повторяющуюся картину: helper-файлы, helper-контейнеры, в которых зачастую реализуются одни и те же вещи, восполняющие то, чего нет в STL. Я не говорю о каких-то узкоспециализированных специфических структурах и алгоритмах — скорее о вещах, без которых не получается комфортно разрабатывать программный продукт на C++. И я вижу, как разные компании на различных проектах сооружают одни и те же самопальные решения, просто потому что они естественны, и на них есть спрос. А предложение отсутствует, по крайней мере в STL.
В статье я хотел собрать самые яркие примеры того, что видел и использовал в разработке. Но в процессе сбора всех отсутствующих из коробки в C++ фич, внезапно для себя обнаружил, что часть из них уже покрыта новыми стандартами языка, полностью или частично. Поэтому данная статья — скорее некая рефлексия и книга жалоб о том, чего не было очень долго, но оно в итоге пришло в язык; и о том, что все еще отсутствует в стандарте. Статья не претендует ни на что, скорее просто поболтать о повседневном C++.
https://habr.com/ru/articles/786582/
#cpp #programming
👉 @cpp_lib
👍6❤2⚡1😁1💋1
Как добавить non-copyable и non-movable объект в std::map или std::unordered_map
https://devblogs.microsoft.com/oldnewthing/20231023-00/?p=108916
#cpp #programming
👉 @cpp_lib
struct weird
{
int value;
std::mutex mtx;
};
std::map<int, weird> table;
table.insert({ 1, {} }); // nope
table.insert_or_assign(1, weird{}); // nope
table.emplace({ 1, {} }); // nope
table.emplace(1, weird{}); // nope
table.try_emplace(1, weird{}); // nope
https://devblogs.microsoft.com/oldnewthing/20231023-00/?p=108916
#cpp #programming
👉 @cpp_lib
Microsoft News
How do I add a non-copyable, non-movable object to a std::map or std::unordered_map?
Fancy emplacement.
👍5⚡1
Верле: разрешаем коллизии
Часть 1
Всех приветствую! Сегодня мы попробуем написать некое подобие простейшего физического движка.
https://habr.com/ru/articles/775228/
Часть 2
В прошлой части мы искали коллизии самым примитивным образом - перебирали все пары объектов и сравнивали сумму их радиусов с расстоянием между их центрами. При таком подходе максимальное число объектов, которое наш движок мог выдержать, составляло несколько сотен.
Возникает закономерный вопрос: зачем проверять на пересечение окружности, которые находятся далеко друг от друга?
Действительно, теперь мы будем поступать чуть хитрее.
https://habr.com/ru/articles/778482/
#cpp #programming
👉 @cpp_lib
Часть 1
Всех приветствую! Сегодня мы попробуем написать некое подобие простейшего физического движка.
https://habr.com/ru/articles/775228/
Часть 2
В прошлой части мы искали коллизии самым примитивным образом - перебирали все пары объектов и сравнивали сумму их радиусов с расстоянием между их центрами. При таком подходе максимальное число объектов, которое наш движок мог выдержать, составляло несколько сотен.
Возникает закономерный вопрос: зачем проверять на пересечение окружности, которые находятся далеко друг от друга?
Действительно, теперь мы будем поступать чуть хитрее.
https://habr.com/ru/articles/778482/
#cpp #programming
👉 @cpp_lib
⚡2👍2
Следует ли проверять указатель на NULL перед вызовом функции free?
Короткий ответ: нет. Тем не менее, раз про это вновь и вновь спрашивают на Reddit, Stack Overflow и других сайтах, пришло время подробно разобрать эту тему. Оказывается, есть много интересного, о чём можно порассуждать.
https://habr.com/ru/companies/pvs-studio/articles/791798/
#cpp #programming
👉 @cpp_lib
Короткий ответ: нет. Тем не менее, раз про это вновь и вновь спрашивают на Reddit, Stack Overflow и других сайтах, пришло время подробно разобрать эту тему. Оказывается, есть много интересного, о чём можно порассуждать.
https://habr.com/ru/companies/pvs-studio/articles/791798/
#cpp #programming
👉 @cpp_lib
👍5⚡2😁1
Шпаргалка по C++
Шпаргалка фокусируется на языке, а не стандартной библиотеке, и учитывает особенности C++11/C++14
#cpp #programming
👉 @cpp_lib
Шпаргалка фокусируется на языке, а не стандартной библиотеке, и учитывает особенности C++11/C++14
#cpp #programming
👉 @cpp_lib
⚡13👌5🤔1🐳1