💣 Как отключить вывод предупреждений о неиспользуемых переменных?
Бывают ситуации, когда приходится пользоваться сторонним кодом (например библиотеками). В нём могут оставаться не используемые переменные, оставленные по той или иной причине. Компилятор на такого рода вещи выдаёт предупреждения
Что бы вывод компиляции не захламлялся данного рода сообщениями, и было проще читать полезные предупреждения, есть специальный флаг (-Wno-unused-variable)
Флаг компилятора -Wno-unused-variable используется для отключения предупреждений, связанных с неиспользуемыми переменными во время компиляции программы
Бывают ситуации, когда приходится пользоваться сторонним кодом (например библиотеками). В нём могут оставаться не используемые переменные, оставленные по той или иной причине. Компилятор на такого рода вещи выдаёт предупреждения
Что бы вывод компиляции не захламлялся данного рода сообщениями, и было проще читать полезные предупреждения, есть специальный флаг (-Wno-unused-variable)
Флаг компилятора -Wno-unused-variable используется для отключения предупреждений, связанных с неиспользуемыми переменными во время компиляции программы
🧨 Для чего нужен принцип подстановки Лисков?
• Принцип подстановки Лисков (Liskov substitution principle) — третий принцип SOLID
• У класса S отнаследованного от T должна быть возможность применяться там, где ожидается T. При этом ожидается, что программа адекватно будет работать
• Идея принципа в том, что контракт (он же функционал), который гарантирует предок должен выполняться и в наследнике
🧨 Как преобразовать std::vector в массив?
Это довольно просто сделать. Достаточно просто разыменовать первый элемент вектора
std::vector<int> vec = {1, 2 , 3};
int* arr = &vrc[0];
Это работает, потому что все элементы std::vector хранятся последовательно
std::vector<int> vec = {1, 2 , 3};
int* arr = &vrc[0];
🔍 Что такое std::span?
std::span — это шаблонный класс-обертка, который предоставляет удобный интерфейс доступа к последовательности элементов, не владея ими. Он позволяет работать с частью или целым массивом, без копирования данных
🛠 Как это работает?
Просто создаём объект std::span, указав начальный указатель на массив и размер, либо контейнер, и получаем легкий доступ к элементам
std::span — это шаблонный класс-обертка, который предоставляет удобный интерфейс доступа к последовательности элементов, не владея ими. Он позволяет работать с частью или целым массивом, без копирования данных
🛠 Как это работает?
Просто создаём объект std::span, указав начальный указатель на массив и размер, либо контейнер, и получаем легкий доступ к элементам
🍔Что делают std::move и std::forward?
❗Если простыми словами, то std::move делает && (r-value), чтобы из всех перегрузок была выбрана именно перегрузка с &&
❗std::forward предназначен для шаблонов, чтобы && передалось в вызываемую из шаблона функцию без изменений. В итоге срабатывает move-семантика и убирается ненужное копирование данных при вызове
❗Если простыми словами, то std::move делает && (r-value), чтобы из всех перегрузок была выбрана именно перегрузка с &&
❗std::forward предназначен для шаблонов, чтобы && передалось в вызываемую из шаблона функцию без изменений. В итоге срабатывает move-семантика и убирается ненужное копирование данных при вызове
🍔 Что такое принцип разделения интерфейса?
Принцип разделения интерфейса (Interface segregation principle) — четвёртый принцип SOLID
❗ Описание
- Множество интерфейсов к разным клиентам гораздо лучше, чем один большой, который покрывает требование всех клиентов
- Снижается связанность в коде и тем самым уменьшает сложность его поддержки
Принцип разделения интерфейса (Interface segregation principle) — четвёртый принцип SOLID
❗ Описание
- Множество интерфейсов к разным клиентам гораздо лучше, чем один большой, который покрывает требование всех клиентов
- Снижается связанность в коде и тем самым уменьшает сложность его поддержки
🍔 В чём заключается смысл принцип инверсии зависимостей?
Принцип инверсии зависимостей (Dependency inversion principle) — пятый принцип SOLID
❗️ Описание
- Лучше зависеть от абстракции, чем от конкретной имплементации
- В ООП лучше передавать интерфейс, чем его реализацию
🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
👩🚀 Откуда космический корабль в C++?
<=> — это оператор spaceship operator в C++. Он был введен в стандарте C++20 и предназначен для использования в контексте трехзначной операции сравнения
🔎 Этот оператор выполняет сравнение двух выражений и возвращает одно из трех значений:
• Отрицательное значение, если левый операнд меньше правого
• Ноль, если левый операнд равен правому
• Положительное значение, если левый операнд больше правого
<=> — это оператор spaceship operator в C++. Он был введен в стандарте C++20 и предназначен для использования в контексте трехзначной операции сравнения
🔎 Этот оператор выполняет сравнение двух выражений и возвращает одно из трех значений:
• Отрицательное значение, если левый операнд меньше правого
• Ноль, если левый операнд равен правому
• Положительное значение, если левый операнд больше правого
🔮 Челлендж от анализатора PVS-Studio: насколько вы внимательны?
Анализаторы кода легко и быстро умеют находить множество ошибок, неочевидных с первого взгляда. Попробуйте наийти ошибки вручную😜
Челлендж состоит из 10 фрагментов кода, в которых есть ошибки. Все они взяты из известных Open Source проектов. Если вы успеваете найти ошибку за 60 секунд — вам начисляется один балл. Фрагменты кода короткие, поэтому 60 секунд — это честное ограничение
👉 Ссылка
Анализаторы кода легко и быстро умеют находить множество ошибок, неочевидных с первого взгляда. Попробуйте наийти ошибки вручную😜
Челлендж состоит из 10 фрагментов кода, в которых есть ошибки. Все они взяты из известных Open Source проектов. Если вы успеваете найти ошибку за 60 секунд — вам начисляется один балл. Фрагменты кода короткие, поэтому 60 секунд — это честное ограничение
👉 Ссылка
Forwarded from Библиотека задач по C++ | тесты, код, задания
🫣 Что за оператор --> ?
На самом деле это два отдельных оператора, -- и >, т.е. постфиксный декремент и оператор больше. Условие можно переписать как while( (x--) > 0 )
🧐 Для чего нужна функция WinMain?
Функция WinMain является точкой входа в графические приложения в операционной системе Windows. Главная отличительная особенность отличающая её от обычной main заключается в том, что для графического приложения не будет выведено никакой консоли
🦾🧠🏋️Качаем мозги к лету!
Курс «Алгоритмы и структуры данных» для тех, кто хочет научиться работать с алгоритмами, подготовиться к собеседованию крупную IT-компанию и начать брать более сложные проекты.
➡️ Алгоритмы и структуры данных35 990 ₽ 21 594 ₽
⭐️ Переходите и активируйте бесплатные вводные занятия курса — https://proglib.io/w/da6727d1
Вас ждут:
– 150 практических заданий и 47 видеолекций
– бессрочный доступ к обучению
– поддержка преподавателя в чате
А также очень харизматичный спикер из Яндекса 🙌🏻
Курс «Алгоритмы и структуры данных» для тех, кто хочет научиться работать с алгоритмами, подготовиться к собеседованию крупную IT-компанию и начать брать более сложные проекты.
➡️ Алгоритмы и структуры данных
⭐️ Переходите и активируйте бесплатные вводные занятия курса — https://proglib.io/w/da6727d1
Вас ждут:
– 150 практических заданий и 47 видеолекций
– бессрочный доступ к обучению
– поддержка преподавателя в чате
А также очень харизматичный спикер из Яндекса 🙌🏻
🍔 Как распечатать все установленные переменные в CMake?
При использовании CMake часто возникает ситуация, когда поведение может отличаться от ожидаемого. Например установленная не та версия компилятора, стандарт C++ отличается от ожидаемого, проектные зависимости появившиеся неизвестно от куда. Один из способов решения — поискать проблему в установленных внешних переменных, для этого можно написать свой макрос (пример на картинке выше)
При использовании CMake часто возникает ситуация, когда поведение может отличаться от ожидаемого. Например установленная не та версия компилятора, стандарт C++ отличается от ожидаемого, проектные зависимости появившиеся неизвестно от куда. Один из способов решения — поискать проблему в установленных внешних переменных, для этого можно написать свой макрос (пример на картинке выше)
🍔 Как установить точность вывода в консоль для конкретной переменной
Для этого можно использовать вы можете связать функцию std::setprecision с переменной, для которой хотите установить точность
std::setprecision — функция из библиотеки iomanip (STL), которая устанавливает точность для вывода чисел с плавающей точкой. В аргументе std::setprecision задаётся количество цифр, которые мы хотим вывести
Для этого можно использовать вы можете связать функцию std::setprecision с переменной, для которой хотите установить точность
std::setprecision — функция из библиотеки iomanip (STL), которая устанавливает точность для вывода чисел с плавающей точкой. В аргументе std::setprecision задаётся количество цифр, которые мы хотим вывести
🍔 Как преобразовать std::string в const char* или char*?
❗Если мы хотим передать std::string в функцию, которой требуется const char*, можно использовать .c_str()
❗Для получения неконстантной строки char*, вызываем .data(). Появилось в C++17, до этого можно было использовать &str[0]
‼️ Указатель становится недействительным, если строка уничтожается
❗Если мы хотим передать std::string в функцию, которой требуется const char*, можно использовать .c_str()
❗Для получения неконстантной строки char*, вызываем .data(). Появилось в C++17, до этого можно было использовать &str[0]
‼️ Указатель становится недействительным, если строка уничтожается
🍔 Библиотека std::stacktrace
В C++23 появилась библиотека std::stacktrace для получения текущего стека вызовов функций,
а именно последовательность вызовов от точки входа main()
С помощью библиотеки можно посмотреть описание функции description() , исходный файл в котором находится функция source file() и номер строки source line()
В C++23 появилась библиотека std::stacktrace для получения текущего стека вызовов функций,
а именно последовательность вызовов от точки входа main()
С помощью библиотеки можно посмотреть описание функции description() , исходный файл в котором находится функция source file() и номер строки source line()
🍔 Зачем нужен std::format?
❗️ В функция printf нет автоматического выведения типов, она подвержена ошибкам и не расширяема
❗️Потоковые объекты (stream) очень многословны и трудно оптимизируются
‼️ В C++20 появился std::format позволяющий форматировать строки в python стиле
🍔 Особенности std::format
• Безопасный для использования с разными типами (Type-safe)
• Поддерживает позиционные аргументы
• Расширяемость (поддержка пользовательских типов)
• Возвращает std::string
❗️ В функция printf нет автоматического выведения типов, она подвержена ошибкам и не расширяема
❗️Потоковые объекты (stream) очень многословны и трудно оптимизируются
‼️ В C++20 появился std::format позволяющий форматировать строки в python стиле
🍔 Особенности std::format
• Безопасный для использования с разными типами (Type-safe)
• Поддерживает позиционные аргументы
• Расширяемость (поддержка пользовательских типов)
• Возвращает std::string