如果 constexpr 需要要求需要 { 需要 } | think-cell

主要观点:C++20 中最有用的两个特性是requires,它们使控制重载解析更简单,与 C++17 的if constexpr结合可进行基于反射的模板优化,requires requiresrequires { requires }常被忽视但很有用。
关键信息:

  • requires可基于编译时条件启用或禁用函数重载,如debug_output根据类型选择不同输出方式。
  • requires可检查条件是否良好形成,替代 SFINAE,如cont_assign中检查容器是否有reserve函数。
  • requiresrequires结合可更强大,如为有特定成员函数的类型添加debug_output重载。
  • requiresrequires还可组合抑制依赖模板参数的表达式错误,如处理指针的debug_output重载。
  • if constexpr配合requires { requires }可优化特定类型的算法,如all_same函数处理不同大小范围。
    重要细节:
  • concept可命名一组影响更具体需求搜索的要求,使用requires可替代concept
  • requires { requires }requiresrequires { … }范围内表示检查条件,不匹配时不考虑要求。
  • requires requires { requires }是不合理的代码,可直接将requires条件从requires { … }范围中取出直接检查。
阅读 10
0 条评论