Перегрузка операторов доступа для собственного умного указателя
operator* должен возвращать ссылку на управляемый объект, а operator-> — указатель на него. Они предоставляют доступ, но не меняют счётчик владельцев.
Читать ответПодготовка к интервью
3221 вопрос в категории «Лайвкодинг»
Что проверяют на интервью
В этой подборке вопросы сгруппированы по формату «Лайвкодинг», чтобы подготовку можно было вести от базовых тем к практическим задачам. В подборке чаще встречаются темы: frontend, browser, database.
Каталог
operator* должен возвращать ссылку на управляемый объект, а operator-> — указатель на него. Они предоставляют доступ, но не меняют счётчик владельцев.
Читать ответВ стандартном C++ std::exception не имеет конструктора от строки, поэтому исходник непереносим и обычно не компилируется. Если заменить его на std::runtime_error, возникнет std::terminate.
Читать ответПереносимого числового ответа нет: важны размер int, порядок байтов и правила доступа через int8_t. На обычной little-endian платформе ожидают 0, но исходный код нельзя считать универсально корректным.
Читать ответОбъявите удалённую перегрузку process(char). Она будет точнее подходить для аргумента char, чем преобразование к int, и компилятор отклонит такой вызов.
Читать ответЭто прежде всего ошибка компиляции, а не обязательный сбой при запуске: неявный деструктор Example использует default_delete для неполного Impl. Определите деструктор там, где Impl уже известен.
Читать ответСначала нужно исправить корректность: бесконечное увеличение signed int приводит к переполнению и неопределённому поведению. После этого уже можно измерять стоимость генерации и ветвления.
Читать ответПервые две формы — указатель на const int; третья — неизменяемый указатель на изменяемый int; четвёртая запрещает и переназначение указателя, и изменение значения через него.
Читать ответСравнивайте головы списков и присоединяйте меньший узел к хвосту результата. Когда один список закончится, присоедините остаток второго. Новые узлы не нужны.
Читать ответЗадайте количество элементов и диапазон, затем используйте генератор из <random> вместе с uniform_int_distribution. Это явно описывает распределение и удобнее, чем rand() с остатком от деления.
Читать ответУ переменной на уровне пространства имён static меняет внешнее связывание на внутреннее. Длительность хранения не меняется: глобальная переменная и без static существует всё время работы программы.
Читать ответДобавьте begin() и end(), возвращающие итераторы внутреннего vector. Константные перегрузки позволят тем же способом обходить const UserCollection; специальные операторы не нужны.
Читать ответПрограмма выведет 34 без пробелов и перевода строки. После case 3 нет break, поэтому выполнение продолжится в case 4 и остановится только на его break.
Читать ответ