C++20 的 requires 子句是 Concepts 的核心语法,用于编译期静态约束模板参数;常见位置在模板参数后、函数声明前,支持布尔常量表达式、concept 名复用及 requires 表达式检查表达式合法性。
C++ 的 requires 子句用于在模板定义中直接表达对模板参数的约束,它是 C++20 Concepts 的核心语法之一。它不是“写在函数末尾的条件判断”,而是编译期静态检查的声明式约束工具,让错误信息更清晰、接口意图更明确。
最常见写法是跟在模板参数列表后、函数声明前,用 requires 关键字引导一个布尔常量表达式:
templaterequires std::is_integral_v T add(T a, T b) { return a + b; }
也可以把约束写成内联形式(更紧凑):
templaterequires std::is_integral_v // 注意:这里不能加分号 T add(T a, T b) { return a + b; }
注意:requires 后必须是编译期可求值的常量表达式(constexpr bool),不能含运行时变量或非 constexpr 函数调用。
比起重复写长表达式,推荐先定义 concept,再在 requires 中复用:
templateconcept Integral = std::is_integral_v ; template requires Integral T add(T a, T b) { return a + b; }
这样语义清晰,也支持逻辑组合:
requires Integral && (sizeof(T) > 2) requires Integral || FloatingPoint (需提前定义 FloatingPoint)requires !std::is_const_v(带否定)requires 不只出现在函数模板前,还有三种合法位置:
template<...> requires ... void f();
void f() requires C; (适用于类成员函数或已有模板参数推导上下文)template void f(T); (这是 concept 作为类型约束的简写,等价于 template requires Integral )三者语义一致,选哪种取决于可读性和上下文习惯。尾随写法在类内定义成员函数时更自然。
除了布尔常量,requires 还支持 requires 表达式(一种特殊的 lambda 式语法),用于检查某表达式能否通过编译:
templateconcept Addable = requires(T a, T b) { { a + b } -> std::same_as ; // 要求 a+b 存在且返回 T 类型 { a += b }; // 只要求能编译,不关心返回值 };
这种写法本质是编译器尝试实例化花括号内的代码块;只要所有子句都满足,整个 requires 表达式为 true。它比 std::is_invocable 等 trait 更灵活,是构建自定义 concept 的主力。
Concepts 和 requires 不是为了炫技,而
是让模板错误从“一长串无法理解的内部展开”变成“error: concept 'Integral' not satisfied by 'std::string'”。写清楚约束,既是帮编译器,也是帮下一个读你代码的人。
# 工具
# ai
# c++
# String
# 常量
# 成员函数
# Error
# bool
# void
# 布尔常量
# Lambda
# 接口
# 函数模板
# 形参
# 子句
# 布尔
# 的人
# 复用
# 这是
# 已有
# 出现在
# 适用于
# 它是
# 三种
相关文章:
如何自定义建站之星网站的导航菜单样式?
建站之星如何通过成品分离优化网站效率?
建站之星会员如何解锁更多建站功能?
如何在Windows虚拟主机上快速搭建网站?
如何正确下载安装西数主机建站助手?
javascript中对象的定义、使用以及对象和原型链操作小结
建站之星在线版空间:自助建站+智能模板一键生成方案
全景视频制作网站有哪些,全景图怎么做成网页?
如何在建站主机中优化服务器配置?
深圳网站制作平台,深圳市做网站好的公司有哪些?
C++时间戳转换成日期时间的步骤和示例代码
代购小票制作网站有哪些,购物小票的简要说明?
郑州企业网站制作公司,郑州招聘网站有哪些?
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
如何在阿里云虚拟主机上快速搭建个人网站?
网站好制作吗知乎,网站开发好学吗?有什么技巧?
中山网站制作网页,中山新生登记系统登记流程?
如何快速查询网站的真实建站时间?
5种Android数据存储方式汇总
官网网站制作腾讯审核要多久,联想路由器newifi官网
相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?
如何通过老薛主机一键快速建站?
如何通过建站之星自助学习解决操作问题?
网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?
平台云上自助建站如何快速打造专业网站?
建站之星代理商如何保障技术支持与售后服务?
道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?
家具网站制作软件,家具厂怎么跑业务?
网站制作公司广州有几家,广州尚艺美发学校网站是多少?
大同网页,大同瑞慈医院官网?
建站主机与服务器功能差异如何区分?
香港服务器WordPress建站指南:SEO优化与高效部署策略
如何通过服务器快速搭建网站?完整步骤解析
清除minerd进程的简单方法
网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?
如何用景安虚拟主机手机版绑定域名建站?
如何在IIS中新建站点并配置端口与IP地址?
怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?
如何选择适配移动端的WAP自助建站平台?
如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法
网站设计制作公司地址,网站建设比较好的公司都有哪些?
定制建站方案优化指南:企业官网开发与建站费用解析
实例解析angularjs的filter过滤器
建站之星安装步骤有哪些常见问题?
如何制作算命网站,怎么注册算命网站?
如何在阿里云域名上完成建站全流程?
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
免费ppt制作网站,有没有值得推荐的免费PPT网站?
建站上传速度慢?如何优化加速网站加载效率?
*请认真填写需求信息,我们会在24小时内与您取得联系。