在对类设计的一些事实感到困惑时,特别是函数是否应该是成员,我查看了 Effective c++ 并找到了第 23 条,即 Prefer non-member non-friend functions to member functions。使用 Web 浏览器示例第一手阅读该内容是有一定道理的,但是该示例中的便利函数(在书中像这样命名非成员函数)会改变类的状态,不是吗?
那么,第一个问题,他们不应该成为会员吗?
进一步阅读,他考虑了 STL 函数,实际上某些类未实现的一些函数是在 stl 中实现的。按照本书的想法,它们演变成一些方便的函数,这些函数被打包到一些合理的命名空间中
std::sort
,例如std::copy
fromalgorithm
。例如vector
,类没有sort
函数,并且使用 stlsort
函数,因此它不是向量类的成员。但是也可以将相同的推理扩展到向量类中的其他一些函数,例如,assign
它也不能作为成员实现,而是作为便利函数实现。然而,这也会改变对象的内部状态,比如它所操作的排序。那么这个微妙但重要(我猜)的问题背后的基本原理是什么。
如果您可以访问这本书,您能否为我进一步澄清这些观点?