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

Вывод T при передаче по значению

Вопрос

Дано template <class T> void f(T x); и const int& r = n;. Каким будет T в вызове f(r)?

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

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

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

Коротко

Правильный ответ: int. При передаче по значению ссылка отбрасывается, а затем и верхнеуровневый const: параметр это новая копия, константность исходника ей не нужна. - const int& получится, только если явно указать или параметр будет const T&. - const int…

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

  1. intправильный ответ
  2. const int&
  3. const int
  4. int&

Разбор

При передаче по значению ссылка отбрасывается, а затем и верхнеуровневый const: параметр это новая копия, константность исходника ей не нужна.

  • const int& получится, только если явно указать или параметр будет const T&.
  • const int вывелся бы для параметра T& (g(T& x)).
  • int& выводится для forwarding-ссылки T&& с неконстантным lvalue.

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

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