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 подскажет развёрнутый ответ в реальном времени.