Undefined behavior
Undefined behavior может возникать из-за различных причин, например делением на ноль, доступом к невыделенной памяти, выходом за пределы массива или использованием неинициализированных переменных.
#для_начинающих
Undefined behavior
(неопределенное поведение) — это концепция в C++, которая означает, что результат выполнения определенного кода программы не определен и может быть непредсказуемым. Это означает, что в случае наличия undefined behavior
в программе нельзя надеяться на какие-либо гарантированные результаты, и программа может вести себя по-разному в разных средах выполнения или даже в разные моменты времени.Undefined behavior может возникать из-за различных причин, например делением на ноль, доступом к невыделенной памяти, выходом за пределы массива или использованием неинициализированных переменных.
#для_начинающих
Дружественные функции
Дружественные функции (friend functions) — это функции, которые объявлены как дружественные внутри класса и имеют доступ к закрытым и защищенным членам этого класса. Это позволяет функциям, которые не являются методами класса, работать с его данными. Дружественные функции объявляются с использованием ключевого слова friend внутри определения класса.
Использование дружественных функций следует ограничивать в тех случаях, когда это действительно необходимо, так как это может нарушать инкапсуляцию данных и сделать код менее структурированным и управляемым.
#для_начинающих
Дружественные функции (friend functions) — это функции, которые объявлены как дружественные внутри класса и имеют доступ к закрытым и защищенным членам этого класса. Это позволяет функциям, которые не являются методами класса, работать с его данными. Дружественные функции объявляются с использованием ключевого слова friend внутри определения класса.
Использование дружественных функций следует ограничивать в тех случаях, когда это действительно необходимо, так как это может нарушать инкапсуляцию данных и сделать код менее структурированным и управляемым.
#для_начинающих
Принцип YAGNI
Принцип YAGNI (You Ain't Gonna Need It), который также известен как «Не добавляйте функциональность, пока она не понадобится».
В контексте С++ это означает, что при проектировании и разработке программы вы должны избегать лишней сложности, излишних функций и структур данных, которые не требуются на текущем этапе разработки. Вместо этого фокусируйтесь на решении актуальных задач и добавлении только тех функций, которые необходимы для выполнения текущих требований.
Этот принцип помогает избежать излишней сложности кода, упростить его поддержку и обеспечить более гибкую архитектуру, которая может легко адаптироваться к будущим изменениям и требованиям.
#для_продвинутых
Принцип YAGNI (You Ain't Gonna Need It), который также известен как «Не добавляйте функциональность, пока она не понадобится».
В контексте С++ это означает, что при проектировании и разработке программы вы должны избегать лишней сложности, излишних функций и структур данных, которые не требуются на текущем этапе разработки. Вместо этого фокусируйтесь на решении актуальных задач и добавлении только тех функций, которые необходимы для выполнения текущих требований.
Этот принцип помогает избежать излишней сложности кода, упростить его поддержку и обеспечить более гибкую архитектуру, которая может легко адаптироваться к будущим изменениям и требованиям.
#для_продвинутых
#вопросы_с_собеседований
Что такое флажки компиляции?
Флажки компиляции — это специальные опции, которые можно указать при компиляции кода, чтобы включить или отключить определенные возможности языка или библиотек.
Используя разные комбинации флажков, можно тонко настроить процесс компиляции под нужды конкретного проекта.
Например:
— std=c++11: включает поддержку стандарта C++11.
— O2: включает оптимизацию кода на уровне O2.
— g: добавляет отладочную информацию в скомпилированный файл.
— Wall: включает предупреждения обо всех возможных ошибках.
— DDEBUG: определяет макрос DEBUG, чтобы можно было использовать условную компиляцию.
— I<path>: добавляет директорию по указанному пути в поиск заголовочных файлов.
Что такое флажки компиляции?
Используя разные комбинации флажков, можно тонко настроить процесс компиляции под нужды конкретного проекта.
Например:
— std=c++11: включает поддержку стандарта C++11.
— O2: включает оптимизацию кода на уровне O2.
— g: добавляет отладочную информацию в скомпилированный файл.
— Wall: включает предупреждения обо всех возможных ошибках.
— DDEBUG: определяет макрос DEBUG, чтобы можно было использовать условную компиляцию.
— I<path>: добавляет директорию по указанному пути в поиск заголовочных файлов.
#вопросы_с_собеседований
Зачем нужен виртуальный деструктор?
Для того, чтобы избежать утечки ресурсов и другого неконтролируемого поведения объекта.
Без ключевого слова virtual у родительского класса Base деструктор порожденного класса не был бы вызван. Т.е. вызвался бы только ~Base():
Зачем нужен виртуальный деструктор?
Для того, чтобы избежать утечки ресурсов и другого неконтролируемого поведения объекта.
Без ключевого слова virtual у родительского класса Base деструктор порожденного класса не был бы вызван. Т.е. вызвался бы только ~Base():
Hello from ~Base()
string at()
std::string::at можно использовать для извлечения символов по символам из заданной строки.
Подробнее ознакомиться можно здесь.
std::string::at можно использовать для извлечения символов по символам из заданной строки.
Подробнее ознакомиться можно здесь.
Call Stack Logger — инструментирование функций как способ отслеживания потока выполнения программы
Доводилось ли вам когда-нибудь работать над C++ проектом с такой огромной кодовой базой, что понимание того, что на самом деле происходит во время выполнения программы, требует кучи времени и сил?
Смотреть статью
Доводилось ли вам когда-нибудь работать над C++ проектом с такой огромной кодовой базой, что понимание того, что на самом деле происходит во время выполнения программы, требует кучи времени и сил?
Смотреть статью
Хабр
Call Stack Logger — инструментирование функций как способ отслеживания потока выполнения программы
Введение Доводилось ли вам когда-нибудь работать над C++ проектом с такой огромной кодовой базой, что понимание того, что на самом деле происходит во время выполнения программы, требует кучи времени и...
Строковые литералы как параметры шаблона
Начиная с C ++ 20, вы можете использовать строку в качестве параметра шаблона, не являющегося типом. Идея состоит в том, чтобы использовать стандартную строку basic_fixed_string, которая имеет конструктор constexpr. Конструктор constexpr позволяет ему создать экземпляр фиксированной строки во время компиляции.
Вроде бы мелочь, а приятно — не нужно производить обходных маневров и использовать лишнюю память.
Начиная с C ++ 20, вы можете использовать строку в качестве параметра шаблона, не являющегося типом. Идея состоит в том, чтобы использовать стандартную строку basic_fixed_string, которая имеет конструктор constexpr. Конструктор constexpr позволяет ему создать экземпляр фиксированной строки во время компиляции.
Вроде бы мелочь, а приятно — не нужно производить обходных маневров и использовать лишнюю память.
Генератор G-кода для 3D-принтеров (RepRap, Makerbot, Ultimaker и др.).
https://www.libhunt.com/r/PrusaSlicer
https://www.libhunt.com/r/PrusaSlicer
Libhunt
PrusaSlicer Alternatives and Reviews
Which is the best alternative to PrusaSlicer? Based on common mentions it is: AltStore, Ohmyzsh, Cura, Kiauh, OctoPrint, KevinOConnor/Klipper or SuperSlicer
This media is not supported in your browser
VIEW IN TELEGRAM
Как написать «Змейку» на C++ в четыре переменные?
Пишем классическую «Змейку», как на КДПВ, в четыре переменные.
Смотреть статью
Пишем классическую «Змейку», как на КДПВ, в четыре переменные.
Смотреть статью
Для чего нужен аллокатор и как создать свой собственный аллокатор?
Аллокатор это шаблонный класс, который отвечает за выделение памяти и создание объектов. По умолчанию все контейнера используют std::allocator<T>.
В языке c++ имеется так же возможность написать свой аллокатор. У своего алокатора должно быть такое объявление(см картинку).
Аллокатор это шаблонный класс, который отвечает за выделение памяти и создание объектов. По умолчанию все контейнера используют std::allocator<T>.
В языке c++ имеется так же возможность написать свой аллокатор. У своего алокатора должно быть такое объявление(см картинку).
#вопросы_с_собеседований
В чем разница между struct и class?
Ответ: Практически ни в чем. В struct модификаторы доступа по умолчанию public, в class private. Также отличается и наследование по умолчанию, у struct — public, у class — private.
В чем разница между struct и class?
Ответ: Практически ни в чем. В struct модификаторы доступа по умолчанию public, в class private. Также отличается и наследование по умолчанию, у struct — public, у class — private.