当我们想让一个非成员函数访问一个类的私有成员时,我们会让它成为该类的朋友。这赋予了它与静态成员函数相同的访问权限。这两种替代方案都会为您提供一个与该类的任何实例都没有关联的函数。
什么时候必须使用好友函数?何时必须使用静态函数?如果两者都是解决问题的可行选择,我们如何衡量它们的适用性?是否有一个默认情况下应该首选的方案?
例如,当实现一个工厂来创建类 foo
的实例时,它只有一个私有构造函数,那么这个工厂函数应该是 foo
的静态成员(你可以调用 foo::create()
)还是一个朋友函数(你可以调用 create_foo()
) ?