对于课堂devise中的一些事实,特别是function是否应该是成员,我考虑了一下Effective c ++,find了第23项,即非成员非好友函数。 用Web浏览器的例子第一手的阅读是有道理的,然而在这个例子中,便利的function(在这本书中命名为非成员函数)改变了这个类的状态,不是吗? 所以,第一个问题,他们不应该是成员吗? 进一步阅读,他认为STL函数,实际上一些类没有实现的函数都是在stl中实现的。 按照本书的思想,它们演变成一些便利的function,它们被压缩到一些合理的命名空间中,比如std::sort , std::copy from algorithm 。 例如, vector类没有sort函数,而使用stl sort函数,所以不是vector类的成员。 但是也可以将相同的推理延伸到vector类中的其他一些函数,比如assign这样也可以不作为成员实现,而是作为一个便利函数。 但是,这也会改变对象的内部状态,就像它所操作的那样。 那么这个微妙但重要的(我猜)问题背后的理由是什么? 如果你有机会获得这本书,你能否为我澄清这些问题?
我读过一个被声明为成员函数的重载运算符是不对称的,因为它只能有一个参数,而另一个自动传递的参数是'this'指针。 所以没有标准来比较它们。 另一方面,声明为朋友的重载运算符是对称的,因为我们传递了两个相同类型的参数,因此可以进行比较。 我的问题是,当我仍然可以比较指针的左值参考,为什么朋友首选? (使用不对称版本会得到与对称相同的结果)为什么STL算法只使用对称版本?