C++ static的使用

C++ static的使用

目录

1.说明

static 为静态.说明如下const

情况 说明 使用场景
修饰变量 本进程中只有一份. 生命周期开始于main函数前,结束于main函数后 单例, 全局统计 需要注意多线程问题
修饰普通函数 只能被作用域类的函数调用 防止函数重名、防止被作用域外的函数调用
修饰类成员函数 任何时候都能调用. 不能调用类的任何成员.(和类的生命周期无关) 类的角色相当于作用域,比成员函数高效(没有this指针). 不调用任何类成员的函数. (如果成员函数能满足,强烈要求设置)

注意:对于函数限定 static 和 const只能选一个.  static比const限定要严格.

  • static限定: 不能读取类的任何非static限定的类成员或函数
  • const限定: 只能读取类的成员或者调用类的const限定类型函数,static限定的场景也能访问

2.例程

//修改前
class CMeasurePolygon
{
   ...
  double getPolygonArea(const std::deque< algo::CRobotPose2D >& domain_pose);
};

void func()
{
    everest::planner::CMeasurePolygon   measure_polygon;  //需要声明类
    if(measure_polygon.isInsidePolygon(domain_pose, object_pose))
    {
       ....
    }
}
//修改后:
class CMeasurePolygon
{
   ...
  static double getPolygonArea(const std::deque< algo::CRobotPose2D >& domain_pose); //静态方法
};

void func()
{
    if(everest::planner::CMeasurePolygon::isInsidePolygon(domain_pose, object_pose)) //不需要初始化类
    {
       ....
    }
}

3.总结

  • 限定函数:能static修饰一定要添加.
  • 限定变量:除非万不得已,不要使用.一旦使用后一定要注意多线程,否则各种bug接踵而至.