#Вопросы_с_собеседования
Что будет, если забыть вызвать delete?
Если в программе забыть вызвать оператор delete при динамическом выделении памяти с помощью new, это приведет к утечке памяти.
Выделенная динамически область памяти не будет возвращена системе и останется занятой до завершения программы. При многократном выделении памяти без освобождения может закончиться свободная память в куче и программа аварийно завершится.
Также "зависшая" память может привести к фрагментации кучи. Это усложнит выделение крупных последовательных блоков памяти в дальнейшем.
Поэтому очень важно правильно выделять и освобождать память во избежание утечек. Лучше всего использовать умные указатели, которые автоматически вызывают delete, или контейнеры, управляющие памятью за программиста.
Что будет, если забыть вызвать delete?
Выделенная динамически область памяти не будет возвращена системе и останется занятой до завершения программы. При многократном выделении памяти без освобождения может закончиться свободная память в куче и программа аварийно завершится.
Также "зависшая" память может привести к фрагментации кучи. Это усложнит выделение крупных последовательных блоков памяти в дальнейшем.
Поэтому очень важно правильно выделять и освобождать память во избежание утечек. Лучше всего использовать умные указатели, которые автоматически вызывают delete, или контейнеры, управляющие памятью за программиста.
🔥 Время прокачивать свои навыки по безопасности и расти!
💥 Проверь себя – пройди тест по ИБ
Ответишь успешно — пройдешь на курс «Rust Developer. Professional» от OTUS по специальной цене со скидкой.
❗️На курсе ты научишься разворачивать Rust и среду разработки, создавать надёжное, отказоустойчивое и высокопроизводительное ПО, тестировать код.
Именно эти навыки дадут мощное конкурентное преимущество IT-специалистам и повысят твою востребованность и доход!
➡️ ПРОЙТИ ТЕСТ: https://clck.ru/38yRdP
💥 Пройдете тест и бонусом получишь:
– Доступ к записям лучших вебинаров курса
– Скидку на онлайн-курс «Rust Developer. Professional»
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
💥 Проверь себя – пройди тест по ИБ
Ответишь успешно — пройдешь на курс «Rust Developer. Professional» от OTUS по специальной цене со скидкой.
❗️На курсе ты научишься разворачивать Rust и среду разработки, создавать надёжное, отказоустойчивое и высокопроизводительное ПО, тестировать код.
Именно эти навыки дадут мощное конкурентное преимущество IT-специалистам и повысят твою востребованность и доход!
➡️ ПРОЙТИ ТЕСТ: https://clck.ru/38yRdP
💥 Пройдете тест и бонусом получишь:
– Доступ к записям лучших вебинаров курса
– Скидку на онлайн-курс «Rust Developer. Professional»
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
std::consume
Синтаксис:
#для_продвинутых
std::consume — это функция, предназначенная для потребления значения из атомарной переменной. Она гарантирует, что все изменения, сделанные в атомарной переменной до вызова std::consume, будут видны в потоке, который ее вызывает.Синтаксис:
void std::consume(std::atomic<T>& var);
#для_продвинутых
std::acquire
#для_продвинутых
std::acquire — это функция, используемая в многопоточном программировании для синхронизации доступа к разделяемым ресурсам. Она позволяет потоку получить эксклюзивный доступ к ресурсу, гарантируя, что никакой другой поток не сможет изменить его, пока он не будет освобожден.#для_продвинутых
std::nullopt
Когда использовать std::nullopt:
— Когда значение может отсутствовать, например, при работе с базами данных, где некоторые поля могут быть пустыми.
— Чтобы избежать использования
— Для обеспечения унифицированного интерфейса:
#для_продвинутых
std::nullopt — это константа типа std::nullopt_t, которая используется для обозначения отсутствия значения в переменной типа std::optional.Когда использовать std::nullopt:
— Когда значение может отсутствовать, например, при работе с базами данных, где некоторые поля могут быть пустыми.
— Чтобы избежать использования
nullptr: std::nullopt является более безопасным и явным способом обозначения отсутствия значения.— Для обеспечения унифицированного интерфейса:
std::optional позволяет унифицировать код, работающий с значениями, которые могут отсутствовать.#для_продвинутых
std::launder
Функция
Функция
Что такое алиасинг?
Алиасинг — это ситуация, когда два или более указателя ссылаются на один и тот же объект в памяти.
Что такое строгий алиасинг?
Строгий алиасинг — это правило компилятора, которое запрещает модифицировать объект через указатель одного типа, если он был получен через указатель другого типа.
#для_продвинутых
Функция
std::launder была добавлена в C++17 для решения проблем, связанных с алиасингом и строгим алиасингом.Функция
std::launder используется для того, чтобы преобразовать указатель одного типа в указатель другого типа, не нарушая при этом правила строгого алиасинга.Что такое алиасинг?
Алиасинг — это ситуация, когда два или более указателя ссылаются на один и тот же объект в памяти.
Что такое строгий алиасинг?
Строгий алиасинг — это правило компилятора, которое запрещает модифицировать объект через указатель одного типа, если он был получен через указатель другого типа.
#для_продвинутых
Стать сотрудником Яндекса быстрее и проще, чем кажется. Участвуйте в днях быстрого найма: решите тестовое, пройдите несколько секций собеседования и получите офер за несколько дней.
Ближайшее мероприятие:
• 23-24 марта — Fast Track для С++ разработчиков, офер за 2 дня в команды Фудтеха Яндекса.
Зарегистрироваться
Ближайшее мероприятие:
• 23-24 марта — Fast Track для С++ разработчиков, офер за 2 дня в команды Фудтеха Яндекса.
Зарегистрироваться
std::decay
#для_продвинутых
std::decay — это шаблонная метафункция в C++, которая применяется для преобразования типа к его «распадающемуся» типу. Это означает, что она удаляет все модификаторы const, volatile, ссылки и cv-квалификаторы, а также преобразует массивы в указатели на их элементы.#для_продвинутых
🫵 Соберите свой первый проект на С++ и добавьте его в портфолио
👉 На бесплатном практическом уроке от OTUS и Карины Дорожкиной — ведущего разработчика в Kaspersky.
На вебинаре:
- разберем понятие единицы трансляции;
- проследим за ошибками компиляции и линковки, разберёмся в их причинах;
- создадим статическую библиотеку и подключим её при помощи CMake;
- обсудим разницу между статической библиотекой и динамической.
⏰ Занятие пройдёт 5 марта в 20:00 мск и будет приурочено к старту курса «Специализация C++ Developer». Доступна рассрочка на обучение!
👉 Зарегистрируйтесь прямо сейчас, чтобы занять место: https://otus.pw/faQz/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
👉 На бесплатном практическом уроке от OTUS и Карины Дорожкиной — ведущего разработчика в Kaspersky.
На вебинаре:
- разберем понятие единицы трансляции;
- проследим за ошибками компиляции и линковки, разберёмся в их причинах;
- создадим статическую библиотеку и подключим её при помощи CMake;
- обсудим разницу между статической библиотекой и динамической.
⏰ Занятие пройдёт 5 марта в 20:00 мск и будет приурочено к старту курса «Специализация C++ Developer». Доступна рассрочка на обучение!
👉 Зарегистрируйтесь прямо сейчас, чтобы занять место: https://otus.pw/faQz/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Что такое std::stack?
Хорошей аналогией может быть сравнение со стопкой предметов, например, стопкой тарелок:
— Добавление элемента: Тарелки добавляются сверху.
— Удаление элемента: Тарелки снимаются сверху.
#для_начинающих
std::stack — это класс, представляющий собой стек, структуру данных, которая работает по принципу LIFO (last-in first-out или "последний вошел — первым вышел"). Это означает, что первым всегда извлекается последний добавленный элемент.Хорошей аналогией может быть сравнение со стопкой предметов, например, стопкой тарелок:
— Добавление элемента: Тарелки добавляются сверху.
— Удаление элемента: Тарелки снимаются сверху.
#для_начинающих
Функция std::stold
Функция
Возвращаемое значение:
Возвращает значение типа
#для_начинающих
Функция
std::stold из стандартной библиотеки C++ преобразует строку, представляющую десятичное число с плавающей запятой, в тип long double.Возвращаемое значение:
Возвращает значение типа
long double, полученное из преобразованной строки.#для_начинающих
😎Разработчик, управляй памятью эффективно!
👉Начните на бесплатном вебинаре онлайн-курса «Программист С» — «Реализация динамических структур данных на Си и Python»: регистрация
Структура вебинара:
- Примеры динамических структур данных
- Схемы управления динамической памятью в С и Python
- Реализация бинарного дерева на С и Python
- Применение функций управления динамической памятью.
Вебинар будет полезен:
- Программистам, изучающим языки С и Python, для развития навыков в области эффективного управления памятью.
- Разработчикам в области больших данных.
🤝Понравится вебинар — продолжите обучение на курсе по специальной цене и даже в рассрочку!
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
👉Начните на бесплатном вебинаре онлайн-курса «Программист С» — «Реализация динамических структур данных на Си и Python»: регистрация
Структура вебинара:
- Примеры динамических структур данных
- Схемы управления динамической памятью в С и Python
- Реализация бинарного дерева на С и Python
- Применение функций управления динамической памятью.
Вебинар будет полезен:
- Программистам, изучающим языки С и Python, для развития навыков в области эффективного управления памятью.
- Разработчикам в области больших данных.
🤝Понравится вебинар — продолжите обучение на курсе по специальной цене и даже в рассрочку!
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Функция std::getline
Функция std::getline в C++ используется для чтения строк из потока ввода, обычно с клавиатуры. Она является частью стандартной библиотеки C++ (iostream) и позволяет считывать строки, содержащие пробелы, в отличие от оператора извлечения (>>), который останавливается на первом пробеле.
#для_начинающих
Функция std::getline в C++ используется для чтения строк из потока ввода, обычно с клавиатуры. Она является частью стандартной библиотеки C++ (iostream) и позволяет считывать строки, содержащие пробелы, в отличие от оператора извлечения (>>), который останавливается на первом пробеле.
#для_начинающих
20 марта: C++ митап в Петербурге и онлайне
Первая за очень долгое время встреча плюсовиков в Питере уже скоро!
В программе:
• Доклад «Цена абстракции» от Константина Владимирова (Syntacore). Поговорим, как правильно использовать виртуальные функции, исключения, ranges и coroutines.
• Доклад «Линтеры: хорошо, но мало» от Евгения Фёклина (PVS-Studio). Узнаем, как работает статический анализ кода.
• Дискуссия про как организовать процесс код-ревью в команде. Опытом поделятся Илья Казаков (YADRO), Андрей Аксенов (AvitoTech, по видео), Станислав Юрченко (VK) и Александр Еналдиев (Kaspersky).
Митап бесплатный.
Забирайте место в зале или получите ссылку на трансляцию — увидимся вечером 20 марта!
Первая за очень долгое время встреча плюсовиков в Питере уже скоро!
В программе:
• Доклад «Цена абстракции» от Константина Владимирова (Syntacore). Поговорим, как правильно использовать виртуальные функции, исключения, ranges и coroutines.
• Доклад «Линтеры: хорошо, но мало» от Евгения Фёклина (PVS-Studio). Узнаем, как работает статический анализ кода.
• Дискуссия про как организовать процесс код-ревью в команде. Опытом поделятся Илья Казаков (YADRO), Андрей Аксенов (AvitoTech, по видео), Станислав Юрченко (VK) и Александр Еналдиев (Kaspersky).
Митап бесплатный.
Забирайте место в зале или получите ссылку на трансляцию — увидимся вечером 20 марта!
#вопросы_с_собеседований
Что такое copy elision и когда становится возможным? Какие особенности для разных стандартов?
copy elision - это техника оптимизации компилятора в C++, которая позволяет устранить ненужные операции копирования или перемещения при возврате объектов из функций или инициализации объектов. Это позволяет компилятору оптимизировать создание и уничтожение временных объектов, в результате чего код становится более эффективным.
copy elision становится возможной в сценариях, определенных стандартом C++. Соответствующее положение стандарта называется правилом "as-if", которое позволяет компилятору оптимизировать программу до тех пор, пока она производит такое же наблюдаемое поведение, как и исходный код.
- C++98/03: copy elision не является обязательной, но разрешена в качестве оптимизации. RVO* и NRVO* - обычные оптимизации, выполняемые компиляторами. *(Return Value Optimization, Named Return Value Optimization)
- C++11: Правила copy elision были пересмотрены. RVO и NRVO стали обязательными в некоторых случаях. copy elision также может происходить при выбросе исключений.
- C++17: Правила исключения копирования были еще более смягчены. Именованные переменные могут быть созданы или присвоены без необходимости выполнения операции перемещения. Эта оптимизация называется "mandatory copy elision".
- C++20: Правила исключения копирования остались такими же, как и в C++17.
Важно отметить, что хотя копирование является широко поддерживаемой оптимизацией, оно все еще зависит от реализации компилятором. Компиляторы могут иметь различное поведение или ограничения в отношении copy elision. Поэтому её использование для оптимизации поведения или производительности может быть непереносимым в различных компиляторах или версиях.
Что такое copy elision и когда становится возможным? Какие особенности для разных стандартов?
copy elision становится возможной в сценариях, определенных стандартом C++. Соответствующее положение стандарта называется правилом "as-if", которое позволяет компилятору оптимизировать программу до тех пор, пока она производит такое же наблюдаемое поведение, как и исходный код.
- C++98/03: copy elision не является обязательной, но разрешена в качестве оптимизации. RVO* и NRVO* - обычные оптимизации, выполняемые компиляторами. *(Return Value Optimization, Named Return Value Optimization)
- C++11: Правила copy elision были пересмотрены. RVO и NRVO стали обязательными в некоторых случаях. copy elision также может происходить при выбросе исключений.
- C++17: Правила исключения копирования были еще более смягчены. Именованные переменные могут быть созданы или присвоены без необходимости выполнения операции перемещения. Эта оптимизация называется "mandatory copy elision".
- C++20: Правила исключения копирования остались такими же, как и в C++17.
Важно отметить, что хотя копирование является широко поддерживаемой оптимизацией, оно все еще зависит от реализации компилятором. Компиляторы могут иметь различное поведение или ограничения в отношении copy elision. Поэтому её использование для оптимизации поведения или производительности может быть непереносимым в различных компиляторах или версиях.
#вопросы_с_собеседований
Как подсчитать количество элементов в std::list?
Чтобы подсчитать количество элементов в std::list, можно использовать следующие способы:
1. Вызвать метод size() самого списка. Он вернет количество элементов.
2. Проитерировать список циклом и считать элементы.
3. Воспользоваться алгоритмом std::distance, передав ему начало и конец списка.
4. Применить алгоритм std::count_if с условием, которое всегда истинно.
Как подсчитать количество элементов в std::list?
1. Вызвать метод size() самого списка. Он вернет количество элементов.
2. Проитерировать список циклом и считать элементы.
3. Воспользоваться алгоритмом std::distance, передав ему начало и конец списка.
4. Применить алгоритм std::count_if с условием, которое всегда истинно.