此页面http://en.cppreference.com/w/cpp/language/constraints指示函数概念的返回类型必须为bool。如果这里只有一个选项,那么首先要求指定返回类型的背后原理是什么?

为什么不只使用以下语法:

template <typename T>
concept DumbConcept() {
   return requires( T a,T b ) {
      requires std::is_same<decltype(a+b),bool>::value;
   };
}

最佳答案



因为它是一个函数,并且函数具有返回类型。不,真的,这就是理由。

C++ 98的原始概念提案在很大程度上失败了,因为它试图做太多事情。因此,“精简概念”提案从绝对最小可行功能开始:一种约束模板的方式和一种定义约束的方式。但作为最低生存功能,requires子句不限于概念;它可以(并且仍然可以)接受任何常量表达式,而不仅仅是一个概念。

这样,“概念”只是可以用某些特殊方式使用的奇特常数表达式。概念需要能够成为模板,并且需要能够评估表达式。由于C++ 11/14没有变量模板,因此当时针对“概念”定义的最小可行功能解决方案是使其成为constexpr函数。确实,lites-lite功能的1.0版甚至没有concept作为关键字。 a "concept" was just any constexpr function that returned bool

显然,概念设计是从那里开始的。

C++ 20中采用的概念版本不包含函数概念。而且它们还没有包括变量概念的bool部分。正如您所指出的那样,这是多余的。

关于c++ - 函数概念返回类型(必须为bool),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46903428/

10-13 06:31