能否请您列举几个具体的例子来说明差异?
答案 0 :(得分:3)
首先,最明显的是:概念是C ++ 20的一部分;合同不是 。
第二,概念是编译时要求;合同是运行时要求。
第三,概念主要与类型的行为有关。尽管可以在值上使用概念,但是由于概念是编译时构造,因此这些值必须是编译时值。合同主要关注价值的行为,因为在合同成为相关之时已经解决了任何类型的问题。
最重要的区别是功能,它们的作用。
一个概念的主要目的是根据某些内容(通常是模板的参数)是否满足一组要求来使一段代码(通常是模板)出现或消失。约束代码的要点是,如果不满足要求,则定义基本上不存在。当一段代码的约束失败时,这不是先验的问题;可能会有更少约束甚至是不受约束的代码版本以不同的方式执行。
合同旨在传达对运行时对象值的约束,其中最常见的情况是函数的参数。违反合同始终是一件坏事,并且程序表现出不确定的行为。