Задачи и тесты по программированию | proghub
2.42K subscribers
655 photos
16 videos
23 files
915 links
Публикуем задачи и вопросы для подготовки к собесу.

Сотрудничество: @cyberJohnny
Download Telegram
👆Объяснение к предыдущему вопросу

👨🏻‍💻 Если тип T встраивает тип X, то T получает все методы X. В частности, если X является типом интерфейса, вложение заставляет T реализовать X. Программа скомпилируется, но в ходе выполнения выкинет панику с ошибкой переполнения стека.

Задачи и тесты по программированию
👆Пояснение к предыдущему вопросу

👨🏻‍💻 Так как функция call_with вызывается без шаблонов, компилятор попытается вывести тип T сам. Так как lambda не является std::function, то внутренний тип вывестись не может, и компилятор должен выкинуть ошибку.

Условно, C++ не разрешает конвертацию в шаблонный тип, потому что не понимает какая конвертация должна совершиться, какую std::function<void(T)> выбрать.

Задачи и тесты по программированию | 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
Что напечатает программа?
Anonymous Quiz
10%
0
49%
1
25%
2
16%
Не определено
👎1
Какой из вариантов GetByKeyOrDefault является корректным?
Anonymous Poll
38%
1
34%
2
13%
3
16%
ни один