为什么C++标准使正则表达式算法成为免费函数

Why does C++ standard make regex algorithms free functions?

本文关键字:免费 函数 算法 正则表达式 C++ 标准 为什么      更新时间:2023-10-16

我想知道为什么C++标准决定使regex_*函数(regex_match,regex_search,regex_replace)非成员非朋友。它们都需要访问basic_regex的内部结构才能执行算法。他们为什么不让他们成为basic_regex的成员职能?在这种情况下,免费函数有什么好处?

由于regex_*函数是非成员、非友元的,所以它们只能访问basic_regex的公共接口。如果它们只需要访问公共接口,那么作为成员函数比自由函数没有太大好处,因为成员和自由函数都可以访问公共接口。此外,通过成为自由函数,您可以删除将 regex_* 函数与 basic_regex 类连接的依赖项。如果将 regex_* 函数添加到、更改或删除,则不使用这些特定 regex_* 函数的basic_regex用户不必重新编译或眨眼。这将有助于将来证明这些功能的客户,并basic_regex未来标准中梦寐以求的任何变化。

regex_* 函数只有在需要

访问basic_regex接口的受保护成员或私有成员时才需要成为成员函数或友元函数。

如果不需要,为什么要添加依赖项?