👆Объяснение к предыдущему вопросу
👨🏻💻 Если тип T встраивает тип X, то T получает все методы X. В частности, если X является типом интерфейса, вложение заставляет T реализовать X. Программа скомпилируется, но в ходе выполнения выкинет панику с ошибкой переполнения стека.
Задачи и тесты по программированию
👨🏻💻 Если тип T встраивает тип X, то T получает все методы X. В частности, если X является типом интерфейса, вложение заставляет T реализовать X. Программа скомпилируется, но в ходе выполнения выкинет панику с ошибкой переполнения стека.
Задачи и тесты по программированию
Сколько раз вызовется любая move операция класса X?
Anonymous Quiz
31%
Хотя бы раз
29%
Хотя бы два раза
37%
Нисколько
4%
Хотя бы три раза
Что напечатает программа?
Anonymous Quiz
43%
42
28%
4242
9%
Неопределенное поведение
19%
Не скомпилируется
👆Пояснение к предыдущему вопросу
👨🏻💻 Так как функция
Условно, C++ не разрешает конвертацию в шаблонный тип, потому что не понимает какая конвертация должна совершиться, какую
Задачи и тесты по программированию | proghub
👨🏻💻 Так как функция
call_with
вызывается без шаблонов, компилятор попытается вывести тип T сам. Так как lambda не является std::function
, то внутренний тип вывестись не может, и компилятор должен выкинуть ошибку. Условно, C++ не разрешает конвертацию в шаблонный тип, потому что не понимает какая конвертация должна совершиться, какую
std::function<void(T)>
выбрать.Задачи и тесты по программированию | proghub
Укажите проблему написанного кода, которая приводит к невозможности исполнять данный код из предложенных вариантов
Anonymous Quiz
13%
Stop нигде не зовётся, PeriodicClosure никогда не завершит свою работу
25%
При создании Derived, Base не знает какую из DoSomething исполнять, что приведёт к datarace vptr
22%
Код не скомпилируется: this capture невозможна в виртуальных классах
13%
Отсутствует виртуальный деструктор, что приведёт к ошибке компиляции
13%
DoSomething в Derived помечена как virtual, код не скомпилируется, virual обязано быть в Base
16%
Код не скомпилируется, так как наследование в виртуальных классах обязано быть private
👆Пояснение к предыдущему вопросу
👨🏻💻 Это правда, что Stop может не позваться, но за Start может стоять специальная логика, которая может позвать Stop, это не самая важная проблема написанного кода. Самая важная -- при инициализации Derived, periodicclosure не знает, что исполнять, а так как vptr инициализируется после Base конструктора, но до конца Derived constructor, может случиться datarace https://stackoverflow.com/questions/6591859/when-does-the-vptr-pointing-to-vtable-get-initialized-for-a-polymorphic-class
Отсутствие виртуального деструктора тоже большая проблема, но она не приведёт к ошибке компиляции. Поэтому этот вариант выбирать не стоило. Остальные варианты разрешены стандартом.
Такие Race ловит ThreadSanitizer, см https://github.com/google/sanitizers/wiki/ThreadSanitizerPopularDataRaces#data-race-on-vptr-during-construction
Задачи и тесты по программированию | proghub
👨🏻💻 Это правда, что Stop может не позваться, но за Start может стоять специальная логика, которая может позвать Stop, это не самая важная проблема написанного кода. Самая важная -- при инициализации Derived, periodicclosure не знает, что исполнять, а так как vptr инициализируется после Base конструктора, но до конца Derived constructor, может случиться datarace https://stackoverflow.com/questions/6591859/when-does-the-vptr-pointing-to-vtable-get-initialized-for-a-polymorphic-class
Отсутствие виртуального деструктора тоже большая проблема, но она не приведёт к ошибке компиляции. Поэтому этот вариант выбирать не стоило. Остальные варианты разрешены стандартом.
Такие Race ловит ThreadSanitizer, см https://github.com/google/sanitizers/wiki/ThreadSanitizerPopularDataRaces#data-race-on-vptr-during-construction
Задачи и тесты по программированию | proghub
👎1
Какой из вариантов GetByKeyOrDefault является корректным?
Anonymous Poll
38%
1
34%
2
13%
3
16%
ни один
👆Пояснение к предыдущему вопросу
👨🏻💻 Отметим сразу, что первый вариант копирует возвращаемое значение и является корректным, проблем с
Второй вариант может быть корректным в некоторых случаях, но давайте рассмотрим следующий код.
Третий вариант имеет такую же проблему, что и второй, так как создаётся временная строка, и указатель внутри
Задачи и тесты по программированию | proghub
👨🏻💻 Отметим сразу, что первый вариант копирует возвращаемое значение и является корректным, проблем с
lifetime
не будет.Второй вариант может быть корректным в некоторых случаях, но давайте рассмотрим следующий код.
const auto& v = GetByKeyOrDefault2(m, k, "127.0.0.1")
будет типом const std::string&
и если вернётся дефолтное значение, то вернётся временный объект, который после вызова функции разрушится, что ведет к неопределённому поведению.Третий вариант имеет такую же проблему, что и второй, так как создаётся временная строка, и указатель внутри
std::string_view
протухнет после вызова.Задачи и тесты по программированию | proghub
👍2
Ускоренный отбор в Яндекс – Intern week offer 🔥
В рамках нового проекта начинающие разработчики смогут пройти собеседования и получить приглашение на стажировку всего за 7 дней. Чтобы пройти отбор, нужно решить контест, пройти технические секции и финалы.
Направления: Backend, Frontend или Mobile
Условия: стажировка оплачивается, длится от 3 до 6 месяцев, и вы можете выбрать занятость 20, 30 или 40 часов в неделю. Иногородним стажёрам мы оплачиваем проезд и проживание, а тех, кто хорошо себя проявит, будем рады видеть в штате.
Крайний срок подачи заявки и решения контеста – 30 октября.
👉Подать заявку: https://clck.ru/32VXKW
В рамках нового проекта начинающие разработчики смогут пройти собеседования и получить приглашение на стажировку всего за 7 дней. Чтобы пройти отбор, нужно решить контест, пройти технические секции и финалы.
Направления: Backend, Frontend или Mobile
Условия: стажировка оплачивается, длится от 3 до 6 месяцев, и вы можете выбрать занятость 20, 30 или 40 часов в неделю. Иногородним стажёрам мы оплачиваем проезд и проживание, а тех, кто хорошо себя проявит, будем рады видеть в штате.
Крайний срок подачи заявки и решения контеста – 30 октября.
👉Подать заявку: https://clck.ru/32VXKW
👍3