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

为什么我们要求必须的要求?

翟志新
2023-03-14

C++20概念的一个特点是,在某些情况下,您必须编写requires requires。例如,[expr.prim.req]/3中的这个示例:

template<typename T>
  requires requires (T x) { x + x; }
    T add(T a, T b) { return a + b; }
template<typename T>
  requires (T x) { x + x; }
    T add(T a, T b) { return a + b; }

共有1个答案

岳英锐
2023-03-14

这是因为语法需要它。它有。

requires约束不必使用requires表达式。它可以使用任何或多或少的任意布尔常数表达式。因此,requires(foo)必须是合法的requires约束。

需要表达式(测试某些事物是否遵循某些约束的表达式)是一个不同的构造;只是通过同一个关键字引入的。requires(Foof)将是有效的requires表达式的开头。

void bar() requires (foo)
{
  //stuff
}

您可以说编译器应该首先弄清楚foo是什么。但是C++真的不喜欢解析一系列标记的基本行为要求编译器在理解标记之前先弄清楚这些标识符的含义。是的,C++是上下文敏感的,所以确实会发生这种情况。但委员会倾向于在可能的情况下避免这样做。

所以是的,是语法。

 类似资料:
  • 问题内容: Angular应用使用属性而不是事件。 为什么是这样? 问题答案: ng-click包含一个角度表达式。Angular表达式是在Angular 范围的上下文中求值的,该范围绑定到具有ng- click属性的元素或该元素的祖先。 Angular表达式语言不包含流控制语句,也不能声明变量或定义函数。这些限制意味着模板只能访问由控制器或指令提供的变量和运行功能。

  • 以我的拙见,关于“什么是单子”这个著名问题的答案,尤其是投票最多的答案,试图解释什么是单子,而没有明确解释为什么单子是真正必要的。它们能被解释为一个问题的解决方案吗?

  • 为什么我们需要字典? 计算机最适合使用数字,而人类最适合使用姓名。我们创建了DNS以便记住主机名而不是IP地址。字典以相同的方式使用,因此我们可以记住AVP名称而不是类型编号。当FreeRADIUS解析请求或生成响应时,会查阅字典。 但是,字典与DNS不同,因为RADIUS客户端不知道FreeRADIUS使用的这些“友好”名称。永远不会在RADIUS客户端和RADIUS服务器之间交换AVP名称。

  • 问题内容: 我开始使用RxJS,但我不明白为什么在此示例中我们需要使用类似or 的函数;数组的数组在哪里? 如果有人可以直观地解释正在发生的事情,那将非常有帮助。 问题答案: 当您有一个Observable的结果是更多Observable时,可以使用flatMap。 如果您有一个由另一个可观察对象产生的可观察对象,则您不能直接过滤,缩小或映射它,因为您有一个可观察对象而不是数据。如果您生成一个可观

  • 问题内容: 我从Angular 2.0开始了一个教程,设置工作区的第一步是安装Node.js和NPM。 为什么我们要为Angular 2.0安装Node.js? 我不记得要对有角度的1.X这样做。 问题答案: 从技术上讲 ,不需要Angular2即可使用Node.js和NPM。它确实使事情变得轻松。这是我推测此选择背后的主要原因: CLI :一段时间以来,构建和开发新的Angular应用程序的实际

  • 问题内容: 我已经在这个程序上工作了一段时间了,我的大脑被炸了。我可以向其他人寻求帮助。 我正在尝试制作一个程序来逐行读取文本文件,并且将每一行都制成一个,以便可以访问每个令牌。我究竟做错了什么? 我要戳一下眼球。我遇到了三个错误: 我究竟做错了什么? 问题答案: 在大多数情况下,当您使用Java使用I / O时,您必须处理IOException,这可能在您读/写甚至关闭流时随时发生。 您必须将敏