gpt4 book ai didi

C++20 概念语法 - requires 参数变量是什么意思?

转载 作者:行者123 更新时间:2023-12-03 06:49:17 29 4
gpt4 key购买 nike

很多文章都给出了这样的例子:

template<typename T>
concept Equal = requires(T a, T b) {
{ a == b } -> std::same_as<bool>;
};
如果我写:
template<typename T>
concept Equal = requires(T a) {
{ a == a } -> std::same_as<bool>;
};
如果不是,为什么语法是这样设计的?为什么他们要我声明这些变量,比如 ab ?
为什么我需要多个相同类型的变量?为什么我什至需要变量?
template<typename T>
concept Equal = requires {
{ declval<const T&>() == declval<const T&>() }
-> std::same_as<bool>;
};

最佳答案

Why do they ask me to declare these variables like a or b? Why not even something like..


不会要求或要求您使用这些变量。您可以选择,因为它更具可读性。就检查约束而言,几乎没有区别。
文章给出你引用的例子的原因是因为它更容易被人类理解。 Equal概念被定义为“给定两个这种类型的假设对象,我们可以用它们写一个比较表达式,结果是 bool”。而已。您不必使用这种表示法,您可以根据需要尽可能详细地编写它。
但是关于代码的古老智慧仍然存在。代码的阅读远远超过编写,而不仅仅是以我们预见的方式。当您的概念在上下文中不满足时,会导致编译器关于违反约束的错误,编译器可能会在其错误消息中包含该约束。哪个版本的概念会产生更易于理解的错误消息?我的赌注是使用辅助变量的那个。

关于C++20 概念语法 - requires 参数变量是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64257615/

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