#вопросы_с_собеседований
Предполагая, что buf является валидным указателем, в чем проблема в приведенном на картинке коде? Каким был бы альтернативный способ реализации этого, который позволил бы избежать этой проблемы?
Проблема в коде заключается в том, что --sz >= 0 всегда будет истинным, поэтому вы никогда не выйдете из цикла while (поэтому вы, вероятно, в конечном итоге испортите память или вызовете какое-то нарушение памяти или какой-либо другой программный сбой, в зависимости от того, что вы делаете внутри цикла). Причина, по которой --sz >= 0 всегда будет истинной, заключается в том, что тип sz равен size_t. size_t на самом деле просто псевдоним одного из основных беззнаковых целочисленных типов. Следовательно, поскольку sz не имеет знака, оно никогда не может быть меньше нуля (поэтому условие никогда не может быть ложным). Одним из примеров альтернативной реализации, позволяющей избежать этой проблемы, может быть использование цикла for следующим образом:
Предполагая, что buf является валидным указателем, в чем проблема в приведенном на картинке коде? Каким был бы альтернативный способ реализации этого, который позволил бы избежать этой проблемы?
Проблема в коде заключается в том, что --sz >= 0 всегда будет истинным, поэтому вы никогда не выйдете из цикла while (поэтому вы, вероятно, в конечном итоге испортите память или вызовете какое-то нарушение памяти или какой-либо другой программный сбой, в зависимости от того, что вы делаете внутри цикла). Причина, по которой --sz >= 0 всегда будет истинной, заключается в том, что тип sz равен size_t. size_t на самом деле просто псевдоним одного из основных беззнаковых целочисленных типов. Следовательно, поскольку sz не имеет знака, оно никогда не может быть меньше нуля (поэтому условие никогда не может быть ложным). Одним из примеров альтернативной реализации, позволяющей избежать этой проблемы, может быть использование цикла for следующим образом:
for (size_t i = 0; i < sz; i++)#вопросы_с_собеседований
Объясните ключевые слова
Ключевое слово
Ключевое слово
Объясните ключевые слова
mutable и volatile.Ключевое слово
volatile сообщает компилятору, что переменная может измениться без ведома компилятора. Переменные, объявленные как volatile, не будут кэшироваться компилятором и, таким образом, всегда будут считываться из памяти.Ключевое слово
mutable можно использовать для переменных-членов класса. Изменяемые переменные могут меняться из константных функций-членов класса.Как следует обрабатывать ошибки во время выполнения в C++?
- Ошибки выполнения в C++ можно обрабатывать с помощью исключений.
- Этот механизм обработки исключений в C++ разработан для обработки ошибок в программном обеспечении, состоящем из независимо разработанных компонентов, работающих в одном процессе и находящихся под синхронным управлением.
- Согласно C++, любая подпрограмма, которая не выполняет своего обещания, генерирует исключение. Вызывающий код, который знает, как обрабатывать эти исключения, может их перехватить.
- Ошибки выполнения в C++ можно обрабатывать с помощью исключений.
- Этот механизм обработки исключений в C++ разработан для обработки ошибок в программном обеспечении, состоящем из независимо разработанных компонентов, работающих в одном процессе и находящихся под синхронным управлением.
- Согласно C++, любая подпрограмма, которая не выполняет своего обещания, генерирует исключение. Вызывающий код, который знает, как обрабатывать эти исключения, может их перехватить.
🛠 5 лучших инструментов управления проектами, о которых вы могли не знать
В старые времена для собрания по планированию спринта требовалась только доска, маркер и стикеры. В наши дни появились цифровые инструменты, которые делают планирование более эффективным, а спринт – более успешным.
https://proglib.io/sh/lvB3EpG7hz
В старые времена для собрания по планированию спринта требовалась только доска, маркер и стикеры. В наши дни появились цифровые инструменты, которые делают планирование более эффективным, а спринт – более успешным.
https://proglib.io/sh/lvB3EpG7hz
Лучшие инструменты и советы начинающему C++ программисту
Хотите изучать C++? Делимся важными навыками, фреймворками и советами, которые помогут начинающему C++ программисту устроиться на работу.
https://proglib.io/p/cpp-dev-skills
Хотите изучать C++? Делимся важными навыками, фреймворками и советами, которые помогут начинающему C++ программисту устроиться на работу.
https://proglib.io/p/cpp-dev-skills
Библиотека программиста
Лучшие инструменты и советы начинающему C++ программисту
Хотите изучать C++? Делимся важными навыками, фреймворками и советами, которые помогут начинающему C++ программисту устроиться на работу.
#вопросы_с_собеседований
Какую проблему решает пространство имён?
Пространство имен — это идентификатор, предоставляющий несколько библиотек. Используется для устранения конфликтов имен, когда имя связано с двумя или более библиотеками. Включает внешние объявления библиотеки с уникальными пространствами имен, что исключает возможность конфликта.
Какую проблему решает пространство имён?
Пространство имен — это идентификатор, предоставляющий несколько библиотек. Используется для устранения конфликтов имен, когда имя связано с двумя или более библиотеками. Включает внешние объявления библиотеки с уникальными пространствами имен, что исключает возможность конфликта.
В чем проблема со следующим кодом?
Поведение не определено, потому что деструктор A не является виртуальным.
class A
{
public:
A() {}
~A(){}
};
class B: public A
{
public:
B():A(){}
~B(){}
};
int main(void)
{
A* a = new B();
delete a;
}
Что за ошибка в приведенном ниже коде и как ее исправить?
Последним аргументом memset должен быть sizeof(*bar), а не sizeof(bar). sizeof(bar) вычисляет размер bar (то есть самого указателя), а не размер структуры, на которую указывает bar. Поэтому код можно исправить, используя sizeof(*bar) в качестве последнего аргумента вызова memset.
my_struct_t *bar;
/* ... делаем что-то, включая указание bar на определенный объект my_struct_t */
memset(bar, 0, sizeof(bar));
Целочисленные преобразования и безопасные сравнения в C++20.
https://www.cppstories.com/2022/safe-int-cmp-cpp20/
https://www.cppstories.com/2022/safe-int-cmp-cpp20/
C++ Stories
Integer Conversions and Safe Comparisons in C++20
Sometimes, If you mix different integer types in an expression, you might end up with tricky cases. For example, comparing long with size_t might give different results than long with unsigned short. C++20 brings some help, and there’s no need to learn all…
Статья о работе со строками в Embedded C++.
https://blog.feabhas.com/2022/02/working-with-strings-in-embedded-c/
https://blog.feabhas.com/2022/02/working-with-strings-in-embedded-c/
Sticky Bits - Powered by Feabhas
Working with Strings in Embedded C++ - Sticky Bits - Powered by Feabhas
In this post, by Embedded I’m generally referring to deeply embedded/bare-metal systems as opposed to Linux-based embedded systems. Embedded systems and strings Historically, the need for and thus the use of strings in embedded systems was fairly limited.…
Указатели и Ссылки C++
Указатели и ссылки — фундаментальные механизмы C++, и их понимание обязательно для изучения языка. Выделение памяти, инициализация ссылок, утечки памяти, динамические массивы: эти и многие другие вопросы будут рассмотрены в данном уроке. Приятного просмотра!
https://youtu.be/tkDeI1PwpV0
Указатели и ссылки — фундаментальные механизмы C++, и их понимание обязательно для изучения языка. Выделение памяти, инициализация ссылок, утечки памяти, динамические массивы: эти и многие другие вопросы будут рассмотрены в данном уроке. Приятного просмотра!
https://youtu.be/tkDeI1PwpV0
YouTube
Указатели и Ссылки C++
C++ - язык программирования, известный своей работой с памятью напрямую и утечками памяти. Указатели позволяют контролировать динамическую память, однако и дарят нам тысячи возможностей "выстрелить себе в ногу". Ссылки позволяют более безопасно передавать…
Способ представления числовых ключей для обратного поискового индекса.
https://habr.com/ru/company/ncloudtech/blog/688230/
https://habr.com/ru/company/ncloudtech/blog/688230/
Хабр
Способ представления числовых ключей для обратного поискового индекса
Числа — совершенно особенная категория текстовых объектов. Они могут быть представлены разными способами: от зачастую многословного и не всегда согласованного между собой ряда убывающих числительных...
Проверка возможности конструирования элемента с набором конкретных параметров
Когда шаблонный класс задан в виде
Когда шаблонный класс задан в виде
template<class T, typename... Args>, бывает трудно понять, какие аргументы можно использовать. Метод is_constructible из библиотеки type_traits даёт неполный ответ: он показывает, существует ли конструктор под конкретные аргументы. Для более полной картины можно использовать еще один шаблон.