Hardconcepts
Что такое requires expression и requires clause?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
requires expression (C++20) возвращает bool, описывающий выполнение требований. requires clause — использование такого в ограничении шаблона. concept — именованный набор требований.
template<class T>
concept Addable = requires(T a, T b) {
a + b; // допустимо выражение
typename T::iterator; // есть тип
};
template<Addable T>
void f(T); // концепт как ограничение
// Составное requires
template<class T>
requires std::integral<T> && std::copyable<T>
void g(T);- Concepts упрощают generic-код, делают его типобезопасным и понятным;
- Стандартные концепты в
<concepts>, также ranges даёт много готовых.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.