static作用范围 inline const define区别

这里写图片描述
static作用范围(变量、函数)
1.函数体内:static变量作用于函数体内,其值在下次调用时维持上次的值保持不变

int func(){
    static int a=3;
    //int a=3;
    cout<<"a="<<a<<endl;
    return a--;
}
int main()
{
    for(int count=0;count<10;count++){
        int b=func();
        cout<<"b="<<b<<endl;
    }
    return 0;
}

当func函数中a定义为static int 类型时,输出结果为
a=3
b=3
a=2// a维持上一次返回的值(3-1=2)保持不变
b=2
a=1
b=1
当func函数中a定义为int 类型时,输出结果为
a=3
b=3
a=3//每次a都为3
b=3
a=3
b=3

2.模块内(只能模块内访问和调用):
模块内的static**全局变量**只能被模块内的所有函数访问,不能被模块外的函数访问。
模块内的static**函数**只能被模块内函数调用,函数使用范围限制在声明的模块内。

3.类内
类中static**成员变量**属于整个类拥有,对类的所有对象只一份复制,该类型的所有对象共同访问。(静态数据成员只有一份拷贝; 非静态数据成员每个对象有一份拷贝)
初始化静态成员变量 <类型> <类名>::<静态成员变量名>=<值>
类中static成员函数属于整个类拥有,函数不接收this指针,不能访问非静态成员函数和非静态成员变量,只能访问类中的static成员函数和变量
调用static成员函数 <类名>::<静态成员函数名>

class M{
public:
    M(int a,int b,int c);
    void getsum();
private:
    int a,b,c;
    static int sum;//声明静态数据成员
};

int M::sum=0;//定义并初始化静态数据成员

M::M(int a,int b,int c){
    this->a=a;
    this->b=b;
    this->c=c;
    sum+=a+b+c;
}
void M::getsum(){
    cout<<sum<<endl;
}

int main()
{
    M test(1,2,3);
    test.getsum();

    return 0;
}

“`
class M{
public:
M(int a,int b,int c);
static void getsum();
private:
int a,b,c;
static int sum;
};
int M::sum=0;//

M::M(int a,int b,int c){
this->a=a;
this->b=b;
this->c=c;

}
void M::getsum(){
sum+=this->a+this->b+this->c;//当getsum声明为静态成员函数时,不能使用当前对象指针this访问非静态成员变量,只能访问静态成员变量。所以编译出错
cout<

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值