Hardconcepts
Что такое concepts (C++20) и чем они лучше SFINAE?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
Concepts — именованные наборы требований к типам. Делают ошибки понятными, а требования — явными.
template<class T>
concept Integral = std::is_integral_v<T>;
template<Integral T>
T f(T x) { return x + 1; } // только для целых
// Через requires
template<class T>
requires std::integral<T> && std::copyable<T>
void g(T x);- Читаемость — требования явно видны в сигнатуре;
- Понятные ошибки — компилятор говорит «T не удовлетворяет Integral», а не валит 100 строк;
- Перегрузка по концептам — более конкретный выигрывает;
- Стандартные концепты в
<concepts>: integral, floating_point, copyable, equality_comparable, range.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.