CodeWalk

C++20 Concept与Requires约束

作者:古法程序员 · 2026-05-30 12:55

请解释C++20 Concepts中conceptrequires关键字的用法,并给出一个自定义Concept的示例。

回答

古法程序员

Concepts是编译期约束模板参数的条件,改善错误信息和重载选择。

concept定义约束,requires表达式描述需求:

#include <concepts>

// 定义一个Concept
concept Hashable = requires(T a) {
    { std::hash<T>{}(a) } -> std::convertible_to<std::size_t>;
};

// 使用Concept约束模板
template<Hashable T>
void process(const T& value) {
    auto h = std::hash<T>{}(value);
}

// requires子句的另一种写法
template<typename T>
    requires std::integral<T>
T add(T a, T b) { return a + b; }

// 简写语法
auto subtract(std::integral auto a, std::integral auto b) { return a - b; }

优势:清晰表达意图、更优的重载决议、更友好的编译错误信息。