Выбор ответа Junior Шаблоны и концепты обновлено

Вывод аргументов шаблона класса

Вопрос

Какой тип у p в std::pair p(1, 2.5); (C++17)?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: std::pair<int, double. С C++17 работает CTAD (class template argument deduction): аргументы шаблона выводятся из аргументов конструктора.

Варианты ответа

  1. std::pair<double, double>
  2. Ошибка компиляции: нужно указать аргументы шаблона
  3. std::pair<int, double>правильный ответ
  4. std::pair<int, int>

Разбор

С C++17 работает CTAD (class template argument deduction): аргументы шаблона выводятся из аргументов конструктора. 1 это int, 2.5 это double.

  • Приведения к общему типу нет.
  • Указывать типы явно с C++17 не обязательно.
  • 2.5 не обрезается до int.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.