This media is not supported in your browser
VIEW IN TELEGRAM
👍30😁26🔥9🎉2❤🔥1
Как работает std::unique_ptr?
Когда объект
std::unique_ptr
— это умный указатель (smart pointer), предназначенный для управления динамически выделенными объектами. Он обеспечивает автоматическое освобождение памяти при выходе объекта из области видимости или при необходимости.Принцип работы std::unique_ptr заключается в том, что он владеет указателем на выделенную память и следит за временем жизни этой памяти.
Когда объект
std::unique_ptr
выходит из области видимости, он автоматически освобождает память, на которую он указывает, путем вызова оператора delete
для хранящегося указателя.❤28👍4👏1🥱1
Константные методы
В C++, ключевое слово
Когда вы вызываете константный метод для объекта класса, компилятор гарантирует, что внутри этого метода вы не будете изменять члены данных объекта, кроме членов, объявленных как
В C++, ключевое слово
const
имеет различное значение в зависимости от контекста. Оно может быть применено к методам классов для указания, что метод не будет изменять состояние объекта, на котором он вызывается. Такие методы называются «константными методами». Когда вы вызываете константный метод для объекта класса, компилятор гарантирует, что внутри этого метода вы не будете изменять члены данных объекта, кроме членов, объявленных как
mutable
(они могут изменяться внутри константных методов).👍8❤5🔥1
🤔 Очередной #дайджест по С++
💠 Современный С++ в разработке девайсов — подход к разработке приложений на С++ для умных устройств с виртуальным ассистентом
💠 Подготовка инструментов под фаззинг UEFI на базе edk2 в Windows — об одном из способов с использованием программного эмулятора EDKII, чтобы проводить фаззинг без развертывания аппаратных стендов
💠 Книга «Разработка приложений на C++ с использованием Boost» — рассказывается о библиотеках Boost, которые помогают разрабатывать качественные, быстрые и портативные приложения
💠 Проектно-ориентированное обучение — список пошаговых туториалов: реализация аллокаторов, файловых систем, текстовых редакторов, баз данных с нуля
💠 Ranges Library в C++20 — уникальные дизайнерские решения для повышения производительности
💠 Современный С++ в разработке девайсов — подход к разработке приложений на С++ для умных устройств с виртуальным ассистентом
💠 Подготовка инструментов под фаззинг UEFI на базе edk2 в Windows — об одном из способов с использованием программного эмулятора EDKII, чтобы проводить фаззинг без развертывания аппаратных стендов
💠 Книга «Разработка приложений на C++ с использованием Boost» — рассказывается о библиотеках Boost, которые помогают разрабатывать качественные, быстрые и портативные приложения
💠 Проектно-ориентированное обучение — список пошаговых туториалов: реализация аллокаторов, файловых систем, текстовых редакторов, баз данных с нуля
💠 Ranges Library в C++20 — уникальные дизайнерские решения для повышения производительности
❤🔥25👍9🔥3🥰1
Какой ссылочный модификатор используется для определения ссылочной переменной?
Anonymous Quiz
4%
$
2%
#
87%
&
6%
Ничего из вышеперечисленного
🤔20👍6👏1
🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
👍6❤1
📚 C++ System Programming Cookbook (2020)
✍️ Автор: Онорато Ватиконе
📃 Cтраниц: 292
C++ является хорошим выбором для системного программирования из-за его эффективных низкоуровневых вычислений, абстракции данных и объектно-ориентированных особенностей. Системное программирование — это разработка и написание компьютерных программ, которые тесно взаимодействуют с базовой операционной системой и позволяют компьютерному оборудованию взаимодействовать с программистом и пользователем. Данная книга послужит справочником для разработчиков, которые хотят иметь готовые к использованию решения для основных аспектов системного программирования
Что внутри:
🔸 Ознакомитесь с основами, включая makefile, компиляцию, связывание и отладку
🔸 Углубите свои знания об управлении памятью
🔸 Используете процессы и потоки для синхронизации
🔸 Узнаете, как правильно взаимодействовать с консолью
✍️ Автор: Онорато Ватиконе
📃 Cтраниц: 292
C++ является хорошим выбором для системного программирования из-за его эффективных низкоуровневых вычислений, абстракции данных и объектно-ориентированных особенностей. Системное программирование — это разработка и написание компьютерных программ, которые тесно взаимодействуют с базовой операционной системой и позволяют компьютерному оборудованию взаимодействовать с программистом и пользователем. Данная книга послужит справочником для разработчиков, которые хотят иметь готовые к использованию решения для основных аспектов системного программирования
Что внутри:
🔸 Ознакомитесь с основами, включая makefile, компиляцию, связывание и отладку
🔸 Углубите свои знания об управлении памятью
🔸 Используете процессы и потоки для синхронизации
🔸 Узнаете, как правильно взаимодействовать с консолью
👍10🔥6
🧑🔬🏥 CLI'нический парсинг
Каждый программист однажды получает по голове необходимостью парсить аргументы командной строки. Кого-то этот удар сломит и заставит написать несколько сотен строк кода, по которому потом будут восстанавливать интерфейс программы следующие поколения, другие сделают наборы рантайм мап и начнут оперировать строками, по которым будет уже непонятно, то ли это так и должно быть, то ли опечатка... Последние в порыве отчаяния возьмут целый boost для этой задачи, а тот сведётся всё к тем же рантайм мапам и строкам.
Здесь вы найдете увлекательный процесс создания этого Франкенштейна
#гайд
Каждый программист однажды получает по голове необходимостью парсить аргументы командной строки. Кого-то этот удар сломит и заставит написать несколько сотен строк кода, по которому потом будут восстанавливать интерфейс программы следующие поколения, другие сделают наборы рантайм мап и начнут оперировать строками, по которым будет уже непонятно, то ли это так и должно быть, то ли опечатка... Последние в порыве отчаяния возьмут целый boost для этой задачи, а тот сведётся всё к тем же рантайм мапам и строкам.
Здесь вы найдете увлекательный процесс создания этого Франкенштейна
#гайд
🔥17👍5👏1
🧨⚠️ ТОП-10 ошибок в C и С++ проектах в 2023 году
Не просто статья о том, как где-то в коде допустили ошибку, а целое волшебство кодинга. 10 масштабных и зрелищных разборов ошибок.
Читать статью
#почитать
Не просто статья о том, как где-то в коде допустили ошибку, а целое волшебство кодинга. 10 масштабных и зрелищных разборов ошибок.
Читать статью
#почитать
👍3🔥1
Что будет, если в двух файлах сделать функцию с одинаковым именем и параметрами? На каком этапе возникнет ошибка?
💩 Если вы определите функцию с одинаковым именем и параметрами в двух разных файлах, это нарушит One Definition Rule. Это правило гласит, что в пределах одной программы не может быть более одного определения любой переменной, функции или класса.
💩 Ошибка обычно возникает на этапе компоновки, когда компоновщик обнаруживает, что два объектных файла содержат определения для одной и той же функции. Компоновщик выдаст ошибку множественного определения и откажется создавать исполняемый файл.
💩 Один из способов решения этой проблемы - использование пространств имен. Вы можете поместить каждую функцию в свое собственное пространство имен, чтобы избежать конфликта имен. Например:
💩 Теперь вы можете использовать обе функции в своей программе, указывая пространство имен перед именем функции:
// fileA.cpp
namespace FileA {
void foo(int a) {
// Some code for file A
}
}
// fileB.cpp
namespace FileB {
void foo(int a) {
// Some code for file B
}
}
FileA::foo(1)
; и FileB::foo(2);
.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12😁7👍6🎉4🥰2
Forwarded from Книги для C/C++ разработчиков
This media is not supported in the widget
VIEW IN TELEGRAM
🤔14😁2
🤔 Очередной #дайджест по С++
🍬 Книга «Coding Clean, Reliable, and Safe REST APIs with ASP.NET Core 8» — все о протоколе HTTP, стиле архитектуры REST и ASP.NET Core 8
🍬 Крутые функции современного C++ для использования в вашем проекте — парочка современных функций C++ и объяснение на минималистичном примере
🍬 Современный С++ в разработке девайсов — детали подхода разработки и взаимодействия с виртуальным ассистентом
🍬 Длительность хранения и Non-local Objects в C++ — рассмотрение глобальных переменных, динамических и локальных объектов потоков
🍬 Технические собеседования — что болит у тех, кто их проводит и кто на них приходит
🍬 Книга «Coding Clean, Reliable, and Safe REST APIs with ASP.NET Core 8» — все о протоколе HTTP, стиле архитектуры REST и ASP.NET Core 8
🍬 Крутые функции современного C++ для использования в вашем проекте — парочка современных функций C++ и объяснение на минималистичном примере
🍬 Современный С++ в разработке девайсов — детали подхода разработки и взаимодействия с виртуальным ассистентом
🍬 Длительность хранения и Non-local Objects в C++ — рассмотрение глобальных переменных, динамических и локальных объектов потоков
🍬 Технические собеседования — что болит у тех, кто их проводит и кто на них приходит
🤩23❤🔥19👍3🔥1
#задача
В шахматном турнире на звание гроссмейстера участвовало 12 человек, каждый сыграл с каждым по одной партии. За победу давалось 1 очко, за ничью — 0.5 очка, за поражение — 0 очков.
Могли ли получить звание гроссмейстера:
● 7 участников?
● 8 участников?
Метод от противного, покажем, что получить звание мастера могли не более 7 участников.
Пусть их было 8
💩 Тогда каждый набрал не менее 0.7 * 11 = 7.7 очков, т.е. не менее 8 очков. Получаем, что все они в сумме набрали не менее 8 * 8 = 64 очков.
💩 В то же время в партиях с участниками, не получившими звание мастера, каждый из них набрал не более 4 очков. Это дает не более 4 * 8 = 32 очков.
💩 Значит, участники, ставшие мастерами, должны были набрать в партиях между собой не менее 32 очков. Но таких партий будет всего (8 * 8 - 8) / 2 = 28. Получаем противоречие.
Пусть их было 7
💩 Пусть первые 7 всегда выигрывали у последних 5, а все остальные партии завершились вничью.
💩 Тогда первые 7 участников набрали по 1 * 5 + 0.5 * 6 = 8 очков, а последние 5 по 0 * 7 + 0.5 * 4 = 2 очка.
В шахматном турнире на звание гроссмейстера участвовало 12 человек, каждый сыграл с каждым по одной партии. За победу давалось 1 очко, за ничью — 0.5 очка, за поражение — 0 очков.
По итогам турнира звание гроссмейстера присваивали, если участник набрал более 70% от числа очков, получаемых в случае выигрыша всех партий.
Могли ли получить звание гроссмейстера:
● 7 участников?
● 8 участников?
Пусть их было 8
Пусть их было 7
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥35👍5🤔4🥱3👏1
Shared memory
Это может быть полезно для:
💩 Повышения производительности: Обмен данными через shared memory гораздо быстрее, чем традиционные методы, такие как межсетевое взаимодействие или файлы.
💩 Уменьшения задержки: Данные доступны обоим процессам напрямую в памяти, устраняя необходимость копирования.
💩 Упрощения синхронизации: Совместное использование памяти упрощает реализацию синхронизации между процессами.
Однако использование shared memory также имеет свои сложности:
💩 Потенциальные ошибки синхронизации: Необходимо тщательно продумать механизмы синхронизации, чтобы избежать проблем.
💩 Отсутствие защиты памяти: Доступ к shared memory могут получить и другие процессы, если не реализованы механизмы защиты.
💩 Сложность отладки: Отладка программ, использующих shared memory, может быть более сложной, чем отладка традиционных программ.
Shared memory является мощным инструментом для межпроцессного взаимодействия, позволяя нескольким процессам совместно использовать область памяти.
Это может быть полезно для:
Однако использование shared memory также имеет свои сложности:
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥22👍18❤2
🤔❓ Так сколько на самом деле строк на C нужно, чтобы выполнить a + b в Python?
Автор решил, что будет сравнивать разницу не в интерактивном режиме, а при чтении из файла. Потому, что в это случае, можно избавиться от лишних процедур ввода вывода для интерактивного режима. Соответственно Python будет исполнять файл. И вот будет сравниваться разница между выполнением пустого файла и файла, где сложение надо будет произвести. Что для этого нужно:
🔹 узнать сколько строк Python нужно вообще, чтобы исполнить пустой файл и выйти без ошибок
🔹 узнать сколько строк Python нужно, чтобы исполнить файл где надо сложить два числа не сохраняя никуда результат
🔹 узнать сколько строк Python нужно вообще, чтобы исполнить файл где идет сложение двух переменных содержащих числа
Читать статью
#почитать
Автор решил, что будет сравнивать разницу не в интерактивном режиме, а при чтении из файла. Потому, что в это случае, можно избавиться от лишних процедур ввода вывода для интерактивного режима. Соответственно Python будет исполнять файл. И вот будет сравниваться разница между выполнением пустого файла и файла, где сложение надо будет произвести. Что для этого нужно:
🔹 узнать сколько строк Python нужно вообще, чтобы исполнить пустой файл и выйти без ошибок
🔹 узнать сколько строк Python нужно, чтобы исполнить файл где надо сложить два числа не сохраняя никуда результат
🔹 узнать сколько строк Python нужно вообще, чтобы исполнить файл где идет сложение двух переменных содержащих числа
Читать статью
#почитать
👍11❤1
Мы продолжаем собирать ваши истории о смене профессии и трудоустройстве в IT, чтобы написать большую аналитическую статью.
👉Если вы еще не рассказывали о своем опыте, пройдите короткий опрос по ссылке.
Please open Telegram to view this post
VIEW IN TELEGRAM
😁5🔥1🌚1
🥸👁️ Отслеживание изменений в директории с помощью Inotify
Автор материала столкнулся с задачей, где необходимо было отслеживать в ОС Linux изменение файла в директории на чистом С++. Так как чистый С++, Qt с его QFileSystemWatcher сразу отпадал, из-за того что необходимо было подключать QObject. В итоге выбор пал на линуксовую функцию Inotify.
Inotify позволяет через файловый дескриптор наблюдать за директорией или файлом, отслеживая их события. Все события ввода-вывода ссылаются на открытый файл с использованием файлового дескриптора. Файловый дескриптор представляет собой целое число типа int.
Работа типичной программы мониторинга организована следующим образом:
♦️ С помощью inotify_init() открывается файловый дескриптор
♦️ Добавляется одно или несколько событий для наблюдений
♦️ Ожидаем добавленное событие
♦️ Обрабатываются события, после чего снова начинаем ждать в бесконечном цикле
♦️ При отсутствии активных наблюдений или при получении определенного сигнала файловый дескриптор закрывается, выполняется очистка и программа завершает работу.
#туториал
Автор материала столкнулся с задачей, где необходимо было отслеживать в ОС Linux изменение файла в директории на чистом С++. Так как чистый С++, Qt с его QFileSystemWatcher сразу отпадал, из-за того что необходимо было подключать QObject. В итоге выбор пал на линуксовую функцию Inotify.
Inotify позволяет через файловый дескриптор наблюдать за директорией или файлом, отслеживая их события. Все события ввода-вывода ссылаются на открытый файл с использованием файлового дескриптора. Файловый дескриптор представляет собой целое число типа int.
Работа типичной программы мониторинга организована следующим образом:
♦️ С помощью inotify_init() открывается файловый дескриптор
♦️ Добавляется одно или несколько событий для наблюдений
♦️ Ожидаем добавленное событие
♦️ Обрабатываются события, после чего снова начинаем ждать в бесконечном цикле
♦️ При отсутствии активных наблюдений или при получении определенного сигнала файловый дескриптор закрывается, выполняется очистка и программа завершает работу.
#туториал
🎉26👍10❤3🔥1