在平时工作中会对工程进行封装,在多个子工程合并时,有时需要全局变量A在整个工程中使用,这时需要加入特定的关键字才能使变量达到我们想要的效果。
- static的一种使用:
例子:
enum StrType{
strM1= 1, //model1
strM2 = 2, //model2
strM3= 5,
strM_MAX,
};
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
int IClassCommon::LoadModel(StrType model_type,std::string& model)
{
/**
* static: 不希望暴露在外部,本次用完之后,下次调用时里面的数据仍然存在, 而且每次使用时都能看到变量定义,一目了然,便于理解函数。
* 形式看起来是局部变量,而其实质是行使全局变量
*/
static std::map<StrType,std::string> map_type2models;
int ret = 0; //
pthread_mutex_lock(&mutex); // 加锁的目的是保护每次访问的内容不被破坏,且注意返回变量的方式
if(model_type <= 0 || model_type >= strM_MAX)
{
ret = -1;
}
else if(model.empty())
{
std::map<StrType,std::string>::iterator it = map_type2models.find(model_type);
if( it != map_type2models.end() )
{
model = it->second;
}
else
{
ret = -1;
}
}
else
{
map_type2models[model_type] = model;
}
pthread_mutex_unlock(&mutex);
return ret;//注意变量的使用,在顺序执行完后最后进行解锁返回,否则每次解锁return 变量,比较麻烦
}
//该函数的作用是用于接口中多种模型路径装载
- extern的使用:
extern: 定义的变量暴露在外部,同时在其他文件中访问时,使用时与定义变量隔的比较远,不便于理解。