概念和合同之间有什么区别?

雅各布
  • 概念是对 C++ 编程语言提供的模板功能的扩展。概念被命名为模板参数上的布尔谓词,在编译时进行评估。概念可能与模板(类模板、函数模板或类模板的成员函数)相关联,在这种情况下,它充当约束:它限制了作为模板参数接受的参数集。
  • 契约允许用谓词注释函数,表达为 C++ 表达式,引用尽可能多的对函数调用者施加的要求,关于传递的参数值和程序状态;以及承诺的结果的详细信息,返回的值和之后程序的状态。

你能举几个具体的例子来解释这些差异吗?

尼可波拉斯

首先,最明显的:概念是 C++20 的一部分;合同不是

其次,概念是编译时要求;契约是运行时需求。

第三,概念主要关注类型的行为。虽然概念可以用于值,但这些值必须是编译时值,因为概念是编译时构造。合同主要关注价值的行为,因为在合同变得相关时,任何类型的问题都已经解决了。

最重要的区别是功能,它们做什么。

一个概念的主要目的是根据某物(通常是该模板的参数)是否满足一组要求来使一段代码(通常是模板)出现或消失。约束代码的要点是,如果不满足要求,则定义基本上不存在。当一段代码的约束失败时,这并不是先验的坏事;可能有一个较少约束甚至不受约束的代码版本,以不同的方式执行。

契约旨在传达对运行时对象值的约束,函数的参数是最常见的情况。违反合同总是一件坏事,程序表现出未定义的行为。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章