我们知道static成员函数不需要类创建具体的实例就可以调用,它有点类似于namespace将类和方法联系在一起。那么什么情况下会考虑将一个private的成员函数设置成static呢?
主要考虑两点:
1.这个方法只能被这个类使用;
2.这个方法独立于这个类的内部状态。
在C++中,一个常用的case就是如果一个private方法是具有工具属性的方法,那就可以考虑设为static。
另一个应用就是《Effective C++》中item 09提到的:
class Transaction
{
public:
explicit Transaction(const std::string& logInfo);
...
};
class ButTransation : public Transaction
{
public:
BuyTransaction(parameters)
: Transaction(createLogString(parameters))
{ ... }
...
private:
static std::string createLogString(parameters);
};
比起在成员初值列(member initialization list)内给予base class所需数据,利用辅助函数创建一个值传给base class构造函数往往比较方便(也比较可读)。令此函数为static,也就不可能意外指向“初期未成熟的BuyTransaction对象内尚未初始化的成员变量”。
参考链接:
https://stackoverflow.com/questions/6445927/what-is-the-use-of-private-static-member-functions
https://softwareengineering.stackexchange.com/questions/234412/why-have-private-static-methods