<分区>
Possible Duplicate:
When should functions be member functions?
在某些情况下,在类外部定义函数会更好还是应该在类内部使用静态函数?
<分区>
Possible Duplicate:
When should functions be member functions?
在某些情况下,在类外部定义函数会更好还是应该在类内部使用静态函数?
最佳答案
有一些情况必须是非成员函数:
运算符重载不能是静态成员函数(它们可以是非静态成员函数),尤其是大多数二元运算符重载作为非成员函数工作得更好,因为您可以在 LHS 和 RHS 上进行隐式转换用于自由运算符重载,但仅在 RHS 上用于成员运算符重载。
std::swap
通常被称为 using std::swap; swap(x,y);
以便类可以通过 ADL“重载”它。因此,按惯例实现 swap
需要一个非成员函数,如果只是作为调用成员函数的包装器的话。其他设计为 ADL 重载的函数也是如此。
从技术上讲,静态成员函数不能具有“C”链接,因此在与其他语言交互时不适合用作回调。实际上,C++ ABI 倾向于使静态函数调用与 C 兼容,当然前提是它们的参数和返回类型存在于 C 中。
到目前为止,我能想到一个必须是静态成员函数而不是自由函数的情况:
protected
。私有(private)静态成员函数通常没有意义,因为通常最好在 .cpp 文件中定义一个带有内部链接的自由函数,其他人甚至看不到它,更不用说调用它了。但我想偶尔你会想要一个。除此之外,这确实是一个风格问题,静态成员函数和自由函数之间并没有太大的实际区别。
关于C++:什么时候适合在类外定义函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5922409/