【问题标题】:Why have both variable and function concepts in C++ Concepts TS?为什么 C++ Concepts TS 中同时存在变量和函数概念?
【发布时间】:2017-11-16 20:42:20
【问题描述】:

我一直在查看在 GCC 6 中实现的 C++1z N4377 Concepts TS 草案,但我不明白拥有两种不同概念的目的:变量概念和函数概念。

函数概念草案的相关部分是[dcl.spec.concept (5.4)]

  • 声明应具有等效于{ return E; } 的函数体,其中E约束表达式 (14.10.1.3)。

对于变量概念,在下一段 [(6.3)] 中:

  • 初始化器应该是一个约束表达式

有什么他们中的一个可以做而另一个不能做的吗?如果没有,是否有理由同时包含两者?

注意:最新草案P0121R0在这方面没有任何改变

【问题讨论】:

  • 注意:概念不会出现在 C++17 中,这是本周早些时候宣布的。
  • 感谢提醒,我没听懂。 Tom Honermann 的 Why Concepts didn’t make C++17 内容丰富,如果有人想知道的话。

标签: c++ c++-concepts c++-ts


【解决方案1】:

函数概念可以在不同的模板参数数量上重载。变量概念没有提供函数概念所不具备的功能,除了在某些情况下不使用 () 的能力。

从 TS 中去除可变概念不会降低概念的表达能力。

【讨论】:

  • 几分钟之内,我在 Tom Honermann 的 Why Concepts didn’t make C++17 中找到了这个答案:)
  • 有点相关:在 D 中,如果编译器可以推断出正在进行函数调用,则可以省略括号。这使得长管道更简洁:container.transform(v).reverse.print; 而不是reverse()print()。如果这在 C++ 中是可能的,那么变量模板将提供更少的概念。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-15
  • 1970-01-01
  • 2021-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多