慎用少用c++的static和extern变量-几个常见错误

本文探讨了C++中普通变量、类函数内的静态变量、类的静态成员变量以及头文件中静态变量的使用,强调了它们的作用域和潜在问题,提醒开发者在编程时正确区分和运用它们以避免混淆和错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

普通的变量是局部的,只存活于它所在的那个大括号(局部作用域)里,程序运行到超出这个区域后就会被销毁。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函数为了完成计时功能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值