当前位置: 首页 > 知识库问答 >
问题:

为什么概念提炼不能使用简洁的语法

林俊英
2023-03-14
template<class T>
  concept Integral = is_integral_v<T>;
template<class T>
  concept SignedIntegral = Integral<T> && is_signed_v<T>;
template<Integral T>
  concept SignedIntegral2 = is_signed_v<T>;

signedintegral2似乎具有与signedintegral相同的明显含义,但它甚至不能在clang上编译。这有原因吗?

共有1个答案

司寇研
2023-03-14

signedintegral2的声明格式错误,因为[temp.concept]/4:

一个概念不应该有相关的约束。

理解其中的原因是很重要的。概念基本上是谓词。他们的工作是接受一系列论据(最常见的是一系列类型),并说明概念是否满足。但是考虑一下这两个不同的实现会给出什么答案:

    null
    null

换句话说,signedintegrate是一个总函数,而signedintegral2是一个部分函数,只在integrate类型上定义。如果我们将两者都写为函数,这可能会更清楚:

template <typename T>
constexpr bool SignedIntegral() { return Integral<T> && is_signed_v<T>; }

template <Integral T>
constexpr bool SignedIntegral2() { return is_signed_v<T>; }

概念始终是总函数是很重要的,这就是为什么不允许相关的约束。

请注意,作为扩展,为了满足概念的需要,将“undefined”视为false当然是可能的,但这会给包含规则增加额外的皱纹,而且实现的复杂性肯定不是微不足道的。当然,未来的某个标准可能会允许它们。我的水晶球目前在商店,所以我说不准。

 类似资料:
  • 问题内容: 我看过许多实现,它们看起来都如此不同,以至于我无法真正提炼出诺言的实质。 如果我不得不猜测,它只是在触发回调时运行的函数。 有人可以在不带链接的几行代码中实现最基本的承诺。 片段1 该函数如何传递才能知道何时运行。 也就是说,它如何传递回ajax完成时触发的回调代码。 片段2 这两个摘要有什么关系? 猜测: 问题答案: 有人可以在几行中实现最基本的承诺吗? 这里是: 这两个摘要有什么关

  • 适用于类的语法不适用于概念: MSVC对“专门化”一行说:。 为什么概念不能专门化?有理论上的原因吗?

  • 这一章我们将尝试建立通用的术语,对Akka面向的并发、分布式系统等提供一个坚实的讨论基础。请注意,这里的很多术语都没有统一的定义。我们只是希望在Akka文档的范围内给出可用的定义。 并发 vs. 并行 并发和并行是相关的定义,有一些微小的不同。并发 指的是两个或多个任务都有进展,即使他们没有被同时执行。例如可以这样实现:划分出时间片,几个任务交叉执行,尽管时间片的执行是线性的。并行 则是指可以真正

  • 我正在尝试理解语法。考虑以下程序: 在上面的程序中,模式匹配中使用的编译正常。当我尝试在like我得到编译错误: 我试图理解为什么不能在中使用。

  • 爱客服简介 爱客服智能客服系统是由中科汇联科技股份有限公司自主研发,专门为中小企业量身定制的全智能、全渠道的云客服平台(以下简称爱客服)。 爱客服以清华、北大、哈工大,三大高校组成的中科汇联人工智能研究院为技术核心;具备精准的语义理解、自然的人机交互、智能的知识梳理等优势;采用机器人+人工坐席+工单+呼叫中心四位一体的服务模式,有效提升客服工作效率、降低管理成本,让企业的价值真正传递给每一位客户。

  • 问题内容: 我一直在阅读有关内核中的Linux内核和CFS调度程序的信息。我遇到了 vruntime (虚拟运行时),这是CFS调度程序背后的核心概念。我从“ Linux Kernel Development ”以及互联网上的其他博客中读到,但无法理解 vruntime 背后的基本计算。是否 vruntime 属于特定进程或做它属于一组进程具有相同的 nice值 。什么是 加权因子 ,如何计算?我