Telegram Web
std::lock_guard

std::lock_guard — это один из классов в стандартной библиотеке C++, предназначенных для обеспечения многопоточной безопасности при работе с разделяемыми данными. Он используется для автоматического захвата и освобождения мьютекса (mutex) при входе и выходе из блока кода.

Прежде всего, мьютекс (mutex) — это механизм синхронизации, который предоставляет эксклюзивный доступ к разделяемым данным одному потоку в данный момент времени. std::lock_guard является удобной оберткой для работы с мьютексами.

#для_продвинутых
Принцип lock-free

Принцип lock-free (без блокировок) в С++ относится к методам многопоточного программирования, которые позволяют избегать использования блокировок (locks) для обеспечения безопасности доступа к данным из нескольких потоков.

Основная идея lock-free программирования заключается в том, чтобы позволить нескольким потокам одновременно работать с общими данными без блокировки выполнения одного или нескольких потоков.

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

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

Undefined behavior (неопределенное поведение) — это концепция в C++, которая означает, что результат выполнения определенного кода программы не определен и может быть непредсказуемым. Это означает, что в случае наличия undefined behavior в программе нельзя надеяться на какие-либо гарантированные результаты, и программа может вести себя по-разному в разных средах выполнения или даже в разные моменты времени.

Undefined behavior может возникать из-за различных причин, например делением на ноль, доступом к невыделенной памяти, выходом за пределы массива или использованием неинициализированных переменных.

#для_начинающих
Дружественные функции

Дружественные функции (friend functions) — это функции, которые объявлены как дружественные внутри класса и имеют доступ к закрытым и защищенным членам этого класса. Это позволяет функциям, которые не являются методами класса, работать с его данными. Дружественные функции объявляются с использованием ключевого слова friend внутри определения класса.

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

#для_начинающих
Принцип YAGNI

Принцип YAGNI (You Ain't Gonna Need It), который также известен как «Не добавляйте функциональность, пока она не понадобится».

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

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

#для_продвинутых
#вопросы_с_собеседований
Что такое флажки компиляции?

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

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

Например:
std=c++11: включает поддержку стандарта C++11.
O2: включает оптимизацию кода на уровне O2.
g: добавляет отладочную информацию в скомпилированный файл.
Wall: включает предупреждения обо всех возможных ошибках.
DDEBUG: определяет макрос DEBUG, чтобы можно было использовать условную компиляцию.
I<path>: добавляет директорию по указанному пути в поиск заголовочных файлов.
#вопросы_с_собеседований
Зачем нужен виртуальный деструктор?

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

Без ключевого слова virtual у родительского класса Base деструктор порожденного класса не был бы вызван. Т.е. вызвался бы только ~Base():
Hello from ~Base()
string at()

std::string::at можно использовать для извлечения символов по символам из заданной строки.

Подробнее ознакомиться можно здесь.
Работа с файлами

Для того, чтобы прочитать файл, понадобится выполнить те же шаги, что и при записи, с небольшими изменениями:
1) создать объект класса ifstream и связать его с файлом, из которого будет производиться считывание;
2) прочитать файл;
3) закрыть файл.
Call Stack Logger — инструментирование функций как способ отслеживания потока выполнения программы

Доводилось ли вам когда-нибудь работать над C++ проектом с такой огромной кодовой базой, что понимание того, что на самом деле происходит во время выполнения программы, требует кучи времени и сил?

Смотреть статью
Атрибуты [[likely]] и [[unlikely]]

В C++20 мы получили новые атрибуты [[likely]] и [[unlikely]], которые позволяют подсказывать оптимизатору, является ли путь выполнения более или менее вероятным.
Строковые литералы как параметры шаблона

Начиная с C ++ 20, вы можете использовать строку в качестве параметра шаблона, не являющегося типом. Идея состоит в том, чтобы использовать стандартную строку basic_fixed_string, которая имеет конструктор constexpr. Конструктор constexpr позволяет ему создать экземпляр фиксированной строки во время компиляции.

Вроде бы мелочь, а приятно — не нужно производить обходных маневров и использовать лишнюю память.
Кортеж — tuple

Как и pair, tuple — коллекция значений различных типов данных конкретного размера.

В некоторых случаях вместо tuple удобнее использовать std::array. Это обычный массив с некоторыми функциями стандартной библиотеки C++, который был добавлен в C++11.
Алгоритмы all_of, any_of и none_of

Начиная с C ++ 11, в STL C ++ добавляются некоторые новые интересные алгоритмы. Эти алгоритмы работают с массивом и полезны для экономии времени во время кодирования и, следовательно, также полезны в конкурентном программировании.
This media is not supported in your browser
VIEW IN TELEGRAM
Как написать «Змейку» на C++ в четыре переменные?

Пишем классическую «Змейку», как на КДПВ, в четыре переменные.

Смотреть статью
Алгоритм set_symmetric_difference

Строит отсортированную последовательность из элементов, которые встречаются только в первой последовательности [first1, last1) или только во второй - [first2, last2).
2025/07/09 10:21:26
Back to Top
HTML Embed Code: