6.5 概念的命名
在发布 C++20 之前有关概念的最后讨论中,有一个是关于概念的命名约定。命名始终是一个棘手的话题。在我早期涉及概念的工作中,我通常以非标准的命名类型的方式来命名概念:像命名专有名词一样,将第一个字母大写,并用下划线来分隔单词,以保证可读性(例如 Sortable
和 Forward_iterator
)。其他人(尤其是印第安纳团队)则使用了驼峰式命名(例如 Sortable
和 ForwardIterator
)。不幸的是,这种命名约定悄悄进入了标准文本 [Carter 2018],并由于与标准库中的所有其他名称不同而引起一些混乱。在那里,使用了下划线,不使用大写字母(除了一些宏和三个晦涩难懂的示例)。然后有人认为,不同的命名约定旨在将新颖且困难
的概念与常规构件
(例如函数和类型)区分开来。
当我注意到这种辩解时,我非常不喜欢。在 C++ 中,我们通常不会把类型编码到实体名称中,但我认为更改命名风格为时已晚。在 2019 年,Herb Sutter 对我的抱怨做出了回应,提议重命名所有标准库中的概念,以遵循常见的标准库命名约定 [Sutter et al. 2019]。大部分概念设计者和范围库(§9.3.5)的设计者作为共同作者都签了字。进行此更改的另一个原因是,我们开始看到标准库里概念的驼峰式名称与其他库中的驼峰式名称之间存在冲突。使用驼峰式命名(或使用我的大写类型约定)的原因之一就是为了避免与标准库冲突。因此,我们现在有了 sortable
、forward_iterator
等。
C++20 标准库包含大约 70 个概念,包括 constructible_from
、convertible_to
、derived_from
、equal_comparable
、invocable
、mergeable
、range
、regular
、same_as
、signed_integral
、semiregular
、sortable
、swappable
和 totally_ordered
,涵盖了运算符调用、基本类型的使用、范围和标准算法的需求。它们将指导许多 C++ 库的设计。请注意,这 70 个概念中很多并不是基本概念,而只是为了方便表示或用作基本构建单元。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论