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

时间:2020-03-14 13:29:11

标签: c++ c++20

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

能否请您列举几个具体的例子来说明差异?

1 个答案:

答案 0 :(得分:3)

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

第二,概念是编译时要求;合同是运行时要求。

第三,概念主要与类型的行为有关。尽管可以在值上使用概念,但是由于概念是编译时构造,因此这些值必须是编译时值。合同主要关注价值的行为,因为在合同成为相关之时已经解决了任何类型的问题。

最重要的区别是功能,它们的作用。

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

合同旨在传达对运行时对象值的约束,其中最常见的情况是函数的参数。违反合同始终是一件坏事,并且程序表现出不确定的行为。

相关问题