在考虑类设计时,特别是函数应该是成员函数还是非成员函数的问题上,我查阅了Effective c++中的第23条建议:优先使用非成员非友元函数。首先看到其中以Web浏览器为例的内容,感觉有些道理,但是书中所称的"方便函数"(指非成员函数)改变了类的状态,不是吗?
那么,我的第一个问题是,这些函数难道不应该成为类的成员函数吗?
继续阅读下去,作者考虑了STL函数,事实上某些没有被一些类实现的函数在STL中得到了实现。按照本书的思路,它们演化成了一些方便函数,打包进一些合理的命名空间中,例如
algorithm
中的std::sort
、std::copy
等。例如vector
类没有一个sort
函数,因此使用STL的sort
函数而不作为vector
类的成员函数。但是,人们也可以将相同的推理应用于vector
类中的其他函数,例如assign
也可以不作为成员函数而作为方便函数来实现。然而,这也会改变对象的内部状态,就像sort
操作一样。那么,这个微妙但重要(我猜)的问题背后的原理是什么呢?
如果你有这本书的访问权限,能否更详细地为我澄清这些问题呢?