Hardcommon-type

Что такое std::common_type?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

`std::common_type<T1, T2, ...>::type` — общий тип, в который можно преобразовать все T_i без потери. Определяет возвращаемый тип для функций вроде std::max, принимающих разные типы.

static_assert(std::is_same_v<std::common_type_t<int, double>, double>);
static_assert(std::is_same_v<std::common_type_t<int, long>, long>);
// common_type<int, int*> не определён — нет общего типа

template<typename T, typename U>
auto maximum(T a, U b) {
    using C = std::common_type_t<T, U>;
    return static_cast<C>(a) > static_cast<C>(b) ? a : b;
}

Реализация основана на тернарном операторе: decltype(false ? declval<T1>() : declval<T2>()). Также есть std::common_reference — для ссылочных типов. Пользовательские типы могут специализировать common_type.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.