gpt4 book ai didi

c++ - C++20 概念的用例是什么?

转载 作者:行者123 更新时间:2023-12-04 12:09:34 25 4
gpt4 key购买 nike

我在回顾 C++20 特性时发现了概念。我发现他们向模板参数添加了验证,但除此之外,我不明白 C++20 概念的真实用例是什么。
C++ 已经有了 std::is_integral 之类的东西他们可以很好地执行验证。
我确定我遗漏了一些关于 C++20 概念及其支持的内容。

最佳答案

SFINAE 是一种意外的图灵完备子语言,它在重载解析和模板特化选择时执行。
事实证明它在模板代码中被大量使用。
Concepts 和 requires 子句试图采用这种意外有用的语言特性并使其变得不那么糟糕。
概念的起源将有 3 个部分; (a) 以干净的方式描述给定的模板代码位需要什么,(b) 还提供一种映射其他类型的方法,以非侵入性地满足这些要求,以及 (c) 检查模板代码,以便任何类型满足概念保证编译
(a) 加 (c) 的所有尝试都失败了,通常要花很长时间来编译和/或限制您可以使用 (a) 检查的内容。 (b) 也被删除以确保 (a) 更好;在许多情况下,您可以手动编写这样的概念图机制,但 C++ 不为您提供。
那么,现在它有什么用呢?

auto sum( Addable auto... values )
使用 Addable 的概念简洁地表达一个模板的界面。传递不可添加的突出显示时收到的错误消息不是 Addable ,以及不起作用的表达式。
template<class T, class A>
struct vector{
bool operator==(vector<t,A>const& o)requires EquallyComparible<T>;
};
在这里,我们声明这个 vector 有一个 ==当且仅当 T做。在概念之前这样做是一项令人讨厌的工作,甚至将规范添加到标准中也是如此。
这是图灵 tar 坑;一切都是等价的,但没有什么是容易的。所有程序都可以用 I/O 加上 (a=(a-b);(a<0)?goto c:next 来编写3 参数指令;但是更丰富的语言可以让程序变得更少。 Concepts 采用了 C++、SFINAE 的一个深奥分支,使其简洁明了(以便更多人可以利用它),并改进了错误消息。

关于c++ - C++20 概念的用例是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67452122/

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