【问题标题】:C++20 concept syntax - what does the requires parameter variables mean?C++20 概念语法 - requires 参数变量是什么意思?
【发布时间】:2021-01-23 05:04:04
【问题描述】:

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

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>;
};

【问题讨论】:

    标签: c++ c++20 c++-concepts


    【解决方案1】:

    为什么他们要求我将这些变量声明为 a 或 b?为什么连类似的东西都没有..

    不会要求或要求您使用变量。您获得了 option,因为它更具可读性。就检查约束而言,差别不大。

    文章之所以给出你引用的那个例子,是因为它更容易人类理解。 Equal 概念被定义为“给定两个这种类型的假设对象,我们可以用它们编写一个比较表达式,结果是 bool”。而已。您不必使用这种表示法,您可以根据需要尽可能详细地编写它。

    但是关于代码的古老智慧仍然存在。代码的阅读量远大于书写量,而不仅仅是我们预见的方式。当您的概念在导致违反约束的编译器错误的上下文中不满足时,编译器可能会在其错误消息中包含该约束。哪个版本的概念会产生更容易理解的错误信息?我的赌注是使用辅助变量的那个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-12
      • 2014-02-11
      • 2013-04-29
      • 1970-01-01
      • 1970-01-01
      • 2018-05-12
      • 2012-05-05
      • 1970-01-01
      相关资源
      最近更新 更多