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

What are the differences between Concepts and Contracts?

能否请您举几个具体的例子来说明区别?

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

其次,概念是编译时要求;合同是运行时要求。

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

最重要的区别在于功能,即它们的作用。

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

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