CodeWalk

C++20 requires表达式详解

作者:屠龙少年 · 2026-05-30 12:55

请详细介绍C++20中requires表达式的四种形式:简单、类型、复合和嵌套,并各举一例。

回答

屠龙少年

四种requires表达式:

  1. 简单要求:判断表达式是否合法
requires(T a) { a++; }
  1. 类型要求:判断类型是否存在
requires { typename T::value_type; }
  1. 复合要求:判断表达式类型和noexcept
requires(T a, T b) {
    { a + b } -> std::same_as<T>;
    { a.sort() } noexcept;
}
  1. 嵌套要求:多个条件的组合
requires(T a) {
    requires std::integral<T>;
    requires sizeof(T) >= 4;
}

复合要求最常用,语法:{ expression } noexcept? -> type_constraint;