我想知道为什么 C++ 标准决定使 regex_* 函数(regex_match、regex_search、regex_replace)成为非成员非友元。他们都需要访问 basic_regex 的内部结构才能执行算法。他们为什么不让它们成为 basic_regex 的成员函数?在这种情况下,免费功能有什么好处?
最佳答案
由于 regex_* 函数是非成员、非友元,它们只能访问 basic_regex
的公共(public)接口(interface)。如果他们只需要访问公共(public)接口(interface),那么成为自由函数的成员函数并没有太大的好处,因为成员函数和自由函数都可以访问公共(public)接口(interface)。此外,通过成为自由函数,您可以删除将 regex_* 函数与 basic_regex
类连接起来的依赖项。如果添加、更改或删除了 regex_* 函数,则不使用这些特定 regex_* 函数的 basic_regex
用户不必重新编译或大惊小怪。这将有助于在未来证明这些功能的客户和 basic_regex
future 标准中所设想的任何更改。
仅当需要访问 basic_regex
接口(interface)的 protected 或私有(private)成员时,regex_* 函数才需要是成员函数或友元函数。
如果不需要,为什么还要添加依赖?
关于c++ - 为什么 C++ 标准使正则表达式算法成为自由函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28177915/