Hardc++20concepts

Что такое концепты (concepts) в C++20?

1Постановка

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

2Решение

Concepts (C++20) — именованные наборы требований к шаблонным параметрам. Дают понятные ошибки компиляции и перегрузку по требованиям.

template<typename T>
concept Integral = std::is_integral_v<T>;

// Использование
template<Integral T>
T add(T a, T b) { return a + b; }

// Или compact-синтаксис
void f(std::integral auto x);

// requires-выражение
template<typename T>
concept Hashable = requires(T t) {
    { std::hash<T>{}(t) } -> std::convertible_to<std::size_t>;
};

Преимущества: (1) ошибки вида «T не удовлетворяет concept Integral» вместо 200 строк в шаблоне STL; (2) перегрузка по концептам; (3) документация в сигнатуре. Стандартные концепты в <concepts>: std::integral, std::same_as, std::derived_from, std::movable, std::regular и др.

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

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

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