c++ - 为什么 C++ 标准使正则表达式算法成为自由函数?

标签 c++ regex c++11 generic-programming

我想知道为什么 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/

相关文章:

c++ - gcc 4.8 或更早版本是否存在关于正则表达式的问题?

c++ - 如何验证 C++ 构造函数中的输入参数?

c++ - std::map operator[] 的一致性

C++ 标准参数 : multiple calls to va_start

c++ - 为什么string类型会导致c++程序运行不起来?

c++ - 如何在cocos2d(cocos2d-x)中制作流水效果

c++ - travis 构建失败说找不到 -lboost_system

php - 使用 preg_replace 替换字符串中的数组变量

Excel VBA 中的正则表达式不正确地匹配扩展 ASCII 字符

c++ - 如何对不同的静态类进行分组?