我想知道为什么C ++标准决定制作regex_ *函数(regex_match,regex_search,regex_replace)非成员非朋友。他们都需要访问basic_regex的内部以执行算法。为什么他们不让它们成为basic_regex的成员函数?在这种情况下,免费功能有什么好处?
答案 0 :(得分:1)
由于regex_ *函数是非成员,非朋友,因此他们只能访问basic_regex
的公共接口。如果他们只需要访问公共接口,那么成为自由函数的成员函数就没什么好处,因为成员和自由函数都可以访问公共接口。此外,通过自由函数,您可以删除将regex_ *函数与basic_regex
类连接的依赖项。如果添加或更改或删除了regex_ *函数,那些不使用这些特定regex_ *函数的basic_regex
用户不必重新编译或击打睫毛。这将有助于将来证明这些功能的客户以及basic_regex
对未来标准中所设想的任何更改。
regex_ *函数只有在需要访问basic_regex
接口的受保护或私有成员时才需要是成员函数或朋友函数。
如果不需要,为什么还要增加依赖?