普通的变量是局部的,只存活于它所在的那个大括号(局部作用域)里,程序运行到超出这个区域后就会被销毁。static修饰的静态变量由于存储于进程的全局数据区,即使程序运行超出了它所在的大括号,该变量依然保持。这貌似给写程序带来了一些便利,但由于类中的static变量是由该类的所有实例化对象所共有,这往往不是我们想要的。举几个常见的例子:
1、类函数里的static变量
比如要写一个周期判断函数,需要记录上一时刻的时间:
/* a.hpp */
#include <ros/ros.h>
class ClassA
{
private:
ros::Time last_time; //需要在函数外定义
public:
void func()
{
if ((ros::Time::now() - last_time) > ros::Duration(0.1))
{
//do something;
last_time = ros::Time::now();
}
}
}
/* a.cpp */
#include "a.hpp"
int main(int argc, char **argv)
{
ros::init(argc, argv, "test_node");
ClassA a;
while(true)
{
a.func();
ros::spinOnce();
ros::Duration(0.001).sleep();
}
}
这个func函数为了完成计时功能