你能举几个具体的例子来解释这些差异吗?
首先,最明显的:概念是 C++20 的一部分;合同不是。
其次,概念是编译时要求;契约是运行时需求。
第三,概念主要关注类型的行为。虽然概念可以用于值,但这些值必须是编译时值,因为概念是编译时构造。合同主要关注价值的行为,因为在合同变得相关时,任何类型的问题都已经解决了。
最重要的区别是功能,它们做什么。
一个概念的主要目的是根据某物(通常是该模板的参数)是否满足一组要求来使一段代码(通常是模板)出现或消失。约束代码的要点是,如果不满足要求,则定义基本上不存在。当一段代码的约束失败时,这并不是先验的坏事;可能有一个较少约束甚至不受约束的代码版本,以不同的方式执行。
契约旨在传达对运行时对象值的约束,函数的参数是最常见的情况。违反合同总是一件坏事,程序表现出未定义的行为。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句