主要观点: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) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。