我们知道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

[C++] - private static成员函数相关推荐

  1. C++类中的static数据成员,static成员函数

    文章转自:http://www.cnblogs.com/gysm/archive/2011/09/16/2179277.html 版权归原作者. C++类中谈到static,我们可以在类中定义stat ...

  2. static成员函数不能调用non-static成员函数

    1 一般类静态成员函数不能调用非静态成员函数 2 static成员函数可以调用构造函数吗? 答案是肯定的,由于static成员函数没有this指针,所以一般static成员函数是不能访问non-sta ...

  3. static成员函数

    1.static成员函数不能定义为const的,这是因为static成员函数只是全局函数的一个形式上的封装,而且static成员函数不能访问类的非静态成员(没有this)指针,修改非静态数据成员又从何 ...

  4. C++类static成员函数的调用

    class中的静态成员函数作用再整个类的内部,对应类的所有实例是共享静态成员函数的,在调用静态成员函数的时候跟调用非静态成员函数是有区别的.另外,静态成员函数只能访问对应类内部的静态数据成员,否则会出 ...

  5. static成员函数和static成员

    C++的静态成员是和类关联的,它属于某个类,但是不属于某个特定的对象.静态成员变量只存储一份供所有对象共用.所以在所有对象中都可以共享它.使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则, ...

  6. 为什么静态static成员函数不能成为virtual虚函数

    首先什么是static静态成员函数?静态成员函数不属于类中的任何一个对象和实例,属于类共有的一个函数.也就是说,它不能用this指针来访问,因为this指针指向的是每一个对象和实例. 对于virtua ...

  7. C++ 类的知识 | 构造函数再探、匿名对象、友元函数、内部类、类的const成员、类的static成员

    文章目录 构造函数再探 以下代码共调用多少次拷贝构造函数 委托构造函数 概念 形式 匿名对象 友元 友元的声明 友元类 令成员函数作为友元 函数重载和友元 注意 内部类 特性 类的const成员 可变 ...

  8. C++ const关键字的总结(全局/局部变量、修饰指针和引用、成员函数和数据成员、修饰类对象、const与宏定义的区别、Static与Const的区别)

    const关键字 const关键字 1.什么是const 2.使用原理 2.1.const全局/局部变量 2.2.cosnt修饰指针和引用 2.3.const修饰函数参数 2.4.const修饰函数返 ...

  9. 对C++ static作用——修饰 数据成员(改变为静态数据成员)、 成员函数(改变为静态成员函数)

    **************************C++中的static的用法******************************** *************************** ...

最新文章

  1. OWA修改密码注意事项
  2. 虚拟机中web服务器的搭建,虚拟机下搭建web服务器
  3. oracle 创建表中又有表,oracle创建表
  4. it编年史_Java的编年史和低延迟
  5. vue-cli4.3 npm run dev启动报错
  6. 伺服电机三环控制系统 一
  7. 软件基本功:重构工作的考虑及执行
  8. coolfire文章之七
  9. 施乐s2110进入维修模式_施乐S2110维修手册(无密码)
  10. 网络七层模型及各层协议
  11. MQL5: 通过反向持仓来平仓
  12. linux磁盘转gpt,Linux中磁盘如何转换GPT格式
  13. E. MEX and Increments
  14. 计算机作业我家乡的变化英语作文,家乡的变化 Changes in My Hometown
  15. 喜茶多肉瓜瓜 | 埃德珈奶茶饮品培训,饮品配方做法制作教程
  16. mba辅导班哪个机构好?全方位解答<title>mba辅导班</title>
  17. 一个跑步时用的轨迹记录和计步器APP
  18. Mapper未生成impl
  19. python空气质量分析与预测_AQI(空气质量指数)分析与预测(一)
  20. 航城街道工商联(商会)领导一行莅临联诚发参观考察

热门文章

  1. 手机如何通过路由器共享计算机硬盘,手机如何访问电脑硬盘之ES文件浏览器?...
  2. 解决ray报错AttributeError: module ‘aioredis‘ has no attribute ‘create_redis_pool‘
  3. 使用Transformers离线模型(以bert模型为例)
  4. Pytorch 配置 Tensorboard 可视化学习(一)
  5. selenium配置无界面chrome浏览器
  6. pandas隔行计算均值方差(相邻行或隔行的均值/方差)
  7. Python第六次作业
  8. mysql基础,DISTINCT关键字
  9. windows doc快捷键
  10. Java程序Date类型比较