前置知识: C++

C++20概念

00:00
1 min Advanced 2026/6/14

C++20 Concepts约束模板详解。

1. 定义概念

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

template<typename T>
concept Addable = requires(T a, T b) {
    { a + b } -> std::convertible_to<T>;
};

2. 使用概念约束模板

// 方式一:requires 子句
template<typename T> requires Integral<T>
T process(T value) { return value * 2; }

// 方式二:概念名替代 typename
template<Integral T>
T process(T value) { return value * 2; }

// 方式三:尾置 requires
auto process(auto value) requires Integral<decltype(value)> {
    return value * 2;
}

3. 标准库概念

#include <concepts>

std::integral<T>        // 整数类型
std::floating_point<T>  // 浮点类型
std::same_as<T, U>      // 相同类型
std::derived_from<T, B> // 派生关系
std::convertible_to<T, U> // 可转换
std::invocable<F, Args...>  // 可调用

4. requires 表达式

template<typename T>
concept Container = requires(T t) {
    typename T::value_type;
    { t.begin() } -> std::same_as<typename T::iterator>;
    { t.end() } -> std::same_as<typename T::iterator>;
    { t.size() } -> std::convertible_to<std::size_t>;
};

知识检测

学习进度

-- 已学文档
--% 知识覆盖率

学习推荐

专注模式