gpt4 book ai didi

c++ - 为什么 C++ 20 中没有枚举概念?

转载 作者:行者123 更新时间:2023-12-01 14:15:58 25 4
gpt4 key购买 nike

我正在尝试使用当前的 GCC10 将一些旧代码更新为即将推出的 C++20 语言。

我无法更新某些模板,因为它们使用了 std::enable_if<std::is_enum_v<T>>条件并且没有 std::enumeration C++20 中定义的概念。

当然我可以定义我自己的概念,但它仍然让我想知道为什么 C++20 没有将所有现有的类型特征都实现为概念。

为什么是这样?我错过了什么重要的事情吗?

最佳答案

没有 enumeration 概念,因为从来没有一个特定的意图来创建一个概念来匹配每个类型特征。甚至大多数。

C++20 概念库或多或少基于使 Ranges 库工作所需的内容。它专注于概念擅长的事情,比如问“我可以用这种类型做什么?”您可以询问是否可以默认构造一个 T 或复制/移动一个,等等。你不是在限制类型是什么,而是你将用它做什么。

enumeration 这样的概念并不是一个非常有用的约束。请记住:从逻辑的角度来看,如果模板约束了一个参数,那么它应该只使用符合该约束的参数。因此,如果您有一个函数采用默认可构造的 T ,那么该函数在默认情况下应该只使用 T 构造一个(尽管在语法上没有什么可以阻止您违反它,但它通常被认为是糟糕的形式)。

要成为 integralfloating_point 需要类型是那些基本类型之一,这带来了这些类型提供的所有表现力。

但是你可以用 enumeration 本身做什么?您可以默认构造一个(尽管这是否代表合法的枚举值并不明显,因此不清楚您将用它做什么),您可以分配和比较它(尽管甚至可以重载比较/delete d),你可以用它的底层类型玩游戏。但仅此而已。

如果某些 T 是枚举,这并不意味着 T 具有任何特定的枚举字段。因此,如果您的约束只是枚举,则枚举的主要功能对您来说就失去了。

这并不意味着它不能出现。但仅仅因为偶尔出现一个约束并不意味着它上升到成为一个概念的水平。

关于c++ - 为什么 C++ 20 中没有枚举概念?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61875100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com