主要观点:C++20 中最有用的两个特性是requires,它们使控制重载解析更简单,与 C++17 的if constexpr结合可进行基于反射的模板优化,requires requires和requires { requires }常被忽视但很有用。
关键信息:
requires可基于编译时条件启用或禁用函数重载,如debug_output根据类型选择不同输出方式。requires可检查条件是否良好形成,替代 SFINAE,如cont_assign中检查容器是否有reserve函数。requires和requires结合可更强大,如为有特定成员函数的类型添加debug_output重载。requires和requires还可组合抑制依赖模板参数的表达式错误,如处理指针的debug_output重载。if constexpr配合requires { requires }可优化特定类型的算法,如all_same函数处理不同大小范围。
重要细节:concept可命名一组影响更具体需求搜索的要求,使用requires可替代concept。requires { requires }中requires在requires { … }范围内表示检查条件,不匹配时不考虑要求。requires requires { requires }是不合理的代码,可直接将requires条件从requires { … }范围中取出直接检查。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。