当前位置: 首页 > news >正文

c++26新功能—契约与概念

一、契约与概念

随着C++新标准的演进中,对安全控制越来越严格,就会出现在不同层次上的安全控制约束。这也符合安全问题解决的思路即全链路控制、整体推进而不能出现所谓的木桶原理现象。本文就对C++26中的契(合)约(Contracts)与C++20中的概念(Concepts)进行初步的分析和说明。

二、契约和概念的特点与不同

在前文分析过,契约更倾向于在运行时进行pre、post等进行条件限制而概念更多的是应用在模板编程中,主要目的是为了约束具体的模板编译条件。所以说二者的一个最重要的不同的在于契约重点是在运行时进行安全控制而概念重点在模板的编译时进行安全控制。
正如在相关文档中所描述,概念与契约是互不相见(Concepts Do Not See Contracts)。也即契约的安全控制无法影响概念的安全控制,这也符合设计思想的理论。
另外,契约一般是限制函数而概念主要是对模板参数进行控制。在出现异常状态时,契约既可以执行默认的行为也可以自定义行为;而概念则提供一个编译错误。
通过上而把 分析可以看出,契约和概念不是互斥的,它们是在不同的层面上对C++代码进行安全控制的,它们可以单独工作也可以一起合作进行协同,提高代码的安全可靠性。

三、二者的协同应用

基于上面的分析,在程序的设计和开发中,可以通过分层进行整体的安全控制:
1、在编译时使用Concepts而在运行时使用Contracts
2、对模板优先使用Concepts同时配合使用Contracts
3、可以配合Contracts中的忽略等情况减少或关闭检查,提高运行效率
二者的协同应用,能够更好的构建健壮、安全C++代码。

四、例程

看一个二者协同的例程:

#include <concepts>
#include <contracts>// Concepts约束
template<typename T>
concept NumCheck = std::integral<T> || std::floating_point<T>;// Contracts验证
template<NumCheck T>
T DivNum(T t1, T t2) pre(t2 != 0)             post( ret: ret >= 0 && ret <= 10)     
{contract_assert (t1 >= 2);               return (t1 / t2) * 10;
}int main() {auto ret = DivNum(7.0, 3.0);// err demo:// 编译错误(Concepts check)DivNum("abc", 5);// 运行时错误(Contracts check)DivNum(10, 0);return 0;
}

五、总结

真正的学会贯通一项技术,不是孤单的使用。而是要灵活的应用到各个场景下,与其它的相关技术协作互补,达到彰显优势,弥补劣势,取长补短,互通有无的境界。也就是常说的从单纯的僵化套用到思想上的有机结合。
一定要明白,任何技术都不是孤独的生长在荒漠上的。

http://www.dtcms.com/a/251238.html

相关文章:

  • 华为OD-2024年E卷-英文输入法[100分] -- python
  • 深入实践Caffeine+Redis两级缓存架构:从原理到高可用设计
  • ubuntu 22.04 安装部署elk(elasticsearch/logstash/kibana) 7.10.0详细教程
  • 【JVM】- 内存模式
  • 如何在Windows上使用qemu安装ubuntu24.04服务器?
  • 【Elasticsearch】文档(二):更新
  • 变幻莫测:CoreData 中 Transformable 类型面面俱到(四)
  • Matlab数字信号处理——基于GUI的ECG信号处理平台设计与实现
  • 解决docker下的Linux系统调用GPU失败
  • STM32 HAL库学习 RNG篇
  • 国产操作系统-银河麒麟本地化部署Ollama国产开源的AI大模型Qwen3
  • 华为云Flexus+DeepSeek征文 | 基于华为云ModelArts Studio平台与Cherry Studio搭建知识库问答助手
  • 【运维系列】【ubuntu22.04】安装Docker
  • Matlab | matlab中100个常用函数全面解析
  • Spring事务简介
  • wordpress外贸独立站搭建步骤
  • 构建多智能体(AI Agent)的高效协作平台——CrewAI探索
  • 从代码学习深度学习 - 词的相似性和类比任务 PyTorch版
  • 电池预测 | 第32讲 Matlab基于CNN-BiLSTM-Attention的锂电池剩余寿命预测,附锂电池最新文章汇集
  • 【系统设计【3】】系统设计面试框架:从理论到实践的完整指南
  • Tomcat 配置双击启动
  • java 设计模式_行为型_19命令模式
  • Django 5.2.3 构建的图书管理系统
  • Linux-多线程安全
  • 【详细】CUDA开发学习教程清单
  • 全国产超小体积RK3576核心板,支持RK3576+FPGA,支持AI与实时控制
  • 搭建K8s集群平台(详细版)
  • FPGA中的DMA技术
  • idea 运行报错
  • 6.14打卡