gpt4 book ai didi

c++ - 将约束应用于模板的三种方式有什么区别?

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

我刚刚了解到 C++20 提供了三种将约束应用于模板的方法:

  • 需要条款
  • 尾随需要条款
  • 约束模板参数

  • 我成功地使用了受约束的模板参数,而且我更喜欢这种语法。我还是想知道为什么会有 标准中定义的方式。

    是否存在根本的技术差异?这些 flavor 是否有独特的优点或缺点(除了语法外观)?

    最佳答案

    没有技术差异。

    // (1)
    void foo(Concept auto&& x);

    意思与以下内容完全相同:
    // (2)
    template <Concept T>
    void foo(T&& x);

    意思与以下内容完全相同:
    // (3)
    template <typename T> requires Concept<T>
    void foo(T&& x);

    意思与以下内容完全相同:
    // (4)
    template <typename T>
    void foo(T&& x) requires Concept<T>;

    ...但只需选择一个并将其始终用于同一个函数(不能用一种语法声明并用另一种语法定义)。

    它们中的每一个都有存在的原因 - (1) 比 (2) 短,但是 (2) 为您提供了类型的名称 - 然后您可以在其他地方使用它。 (2) 比 (3) 和 (4) 短,但 (3) 和 (4) 更一般,允许更多种类的约束。 (3) 和 (4) 看起来一样,但是 (4) 是类模板的成员函数所必需的,并且还允许您访问参数名称。

    关于c++ - 将约束应用于模板的三种方式有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61875211/

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