C++ C++  ·  25 вопросов  ·  ~70 мин  ·  ⏱ Таймер 10:00  ·  Средний  ·  👥 1 прошёл

Шаблоны функций и классов

Тест проверяет, умеет ли разработчик видеть момент инстанцирования, отличать вывод параметров от обычных преобразований и читать ошибки шаблонов как цепочку требований. Здесь недостаточно помнить синтаксис `template<class T>` — нужно понимать, какой код реально появится для конкретного T.

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. В тесте 25 вопросов, время — 70 минут. Во многих заданиях недостаточно узнать конструкцию: проследите порядок вычислений, время жизни объектов, владение ресурсами и условия, при которых решение остаётся корректным. После завершения откроются правильные ответы, объяснения, общий результат и тематические шкалы.
Вопрос 1 из 25
Что представляет параметр N?
C++C++20
#include <cstddef>
template<class T, std::size_t N>
struct Buffer { T data[N]; };
Вопрос 2 из 25
Почему `Buffer<int, 4>` и `Buffer<int, 8>` — разные типы?
C++C++20
template<class T, std::size_t N>
struct Buffer {
    std::array<T, N> data;
};

static_assert(!std::is_same_v<Buffer<int,4>, Buffer<int,8>>);
Вопрос 3 из 25
Что позволяет параметр `template<class> class Container`?
C++C++20
template<class T, template<class> class Container>
struct Store { Container<T> values; };
Вопрос 4 из 25
Какой смысл у значения по умолчанию `class Alloc = std::allocator<T>`?
C++C++20
template<class T, class Alloc = std::allocator<T>>
class SmallVector {
public:
    using allocator_type = Alloc;
private:
    [[no_unique_address]] Alloc alloc_;
};
Вопрос 5 из 25
Какое ограничение есть у параметров шаблона функций по умолчанию?
Вопрос 6 из 25
Какой T будет выведен?
C++C++20
template<class T> void f(T);
const int x = 3;
f(x);
Вопрос 7 из 25
Какой T будет выведен для параметра `T&`?
C++C++20
template<class T> void f(T&);
const int x = 3;
f(x);
Вопрос 8 из 25
Почему вызов `max(1, 2.0)` не выводит T для шаблона `max(T,T)`?
C++C++20
template<class T> T max(T a, T b);
auto x = max(1, 2.0);
Вопрос 9 из 25
Что сохраняет размер строкового литерала в параметре?
C++C++20
template<std::size_t N>
constexpr std::size_t literal_size(const char (&text)[N]) {
    return N - 1;
}

static_assert(literal_size("hello") == 5);
Вопрос 10 из 25
Для какого аргумента `T&&` является forwarding reference?
C++C++20
template<class T>
void relay(T&& value) {
    consume(std::forward<T>(value));
}

std::string name = "Ada";
relay(name);
relay(std::string("Lin"));
Вопрос 11 из 25
Можно ли частично специализировать шаблон функции?
Вопрос 12 из 25
Что обозначает `Box<T*>`?
C++C++20
template<class T> struct Box;
template<class T> struct Box<T*> { static constexpr bool pointer = true; };
Вопрос 13 из 25
Какая версия выберется для `Trait<int*>` при наличии первичного шаблона и специализации `Trait<T*>`?
C++C++20
template<class T> struct Trait { static constexpr bool pointer = false; };
template<class T> struct Trait<T*> { static constexpr bool pointer = true; };

static_assert(Trait<int*>::pointer);
static_assert(!Trait<int>::pointer);
Вопрос 14 из 25
Где должна быть объявлена явная специализация шаблона?
Вопрос 15 из 25
Почему перегрузка функции часто предпочтительнее её полной специализации?
Вопрос 16 из 25
Почему шаблон компилируется до вызова с NoPlus?
C++C++20
template<class T>
auto add(const T& a, const T& b) { return a + b; }
Вопрос 17 из 25
Зачем в зависимом имени пишут `typename T::value_type`?
C++C++20
template<class T>
void clear(T& container) {
    typename T::value_type zero{};
    container.assign(container.size(), zero);
}
Вопрос 18 из 25
Когда нужен ключ `template` в выражении вроде `obj.template get<0>()`?
C++C++20
template<class T>
auto read_first(T& object) {
    return object.template get<0>();
}
// get — зависимое шаблонное имя; без template разбор неоднозначен.
Вопрос 19 из 25
Что означает SFINAE?
Вопрос 20 из 25
Почему ошибка внутри вызываемой из шаблона обычной функции не обязана быть SFINAE?
Вопрос 21 из 25
Как дать пользователю шаблона ясную ошибку о требовании копируемости до C++20?
C++C++20
template<class T>
T duplicate(const T& value) {
    static_assert(std::is_copy_constructible_v<T>,
                  "duplicate requires a copy-constructible type");
    return T(value);
}
Вопрос 22 из 25
Что помогает сократить огромную трассу ошибки шаблона?
Вопрос 23 из 25
Зачем явно инстанцировать шаблон в .cpp и объявлять extern template в заголовке?
Вопрос 24 из 25
Какой тест обнаружит скрытое требование default-конструктора у контейнерного шаблона?
Вопрос 25 из 25
Почему тестирование только одной специализации шаблона недостаточно?

Ответьте на все 25 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу