将函数实现为自由函数而不是C++中的成员是否有任何优势?

Dei*_*Dei 6 c++ optimization class c++11

我对技术物流很感兴趣.是否有任何优势,例如保存的内存等,来实现处理类的某些功能?

特别是,将操作符重载实现为自由函数(假设您不需要访问任何私有成员,即使这样,您也可以让他们使用非成员的朋友)?

每次创建对象时,是否为类的每个函数提供了不同的内存地址?

Jea*_*nès 5

这个答案可能对您有所帮助:运算符重载:成员函数与非成员函数?. 通常,如果您需要在无法访问代码源的类上实现运算符(考虑s)或者左操作数不是类类型(例如),则自由函数是强制性的。如果您控制类的代码,则可以自由使用函数成员。streamint

对于您的最后一个问题,不,函数成员是唯一定义的,并且使用对象内部表来指向它们。函数成员可以被视为具有隐藏参数的自由函数,该参数是指向对象的指针, 与大致类似的原型大致o.f(a)相同。f(&o,a)f(C *this,A a);


Pet*_*ter 5

关于使用非成员函数实现功能优于函数成员的情况,有各种文章.

例子包括

关于非成员如何改进封装的Scott Meyers("Effective C++","Effective STL"等书籍的作者):http: //www.drdobbs.com/cpp/how-non-member-functions-improve- encapsu/184401197

Herb Sutter在他的周大师系列#84"Monoliths Unstrung"中.基本上他提倡,当可以作为成员或非成员非朋友实现功能时,更喜欢非成员选项. http://www.gotw.ca/gotw/084.htm