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