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接踵而至.