C++ static关键字

本文详细介绍了C++中static关键字的两种用法:面向过程时修饰变量和函数,以及面向对象时修饰静态成员变量和函数。静态成员变量是类共享的,不占用对象内存,需在类外初始化。静态成员函数没有this指针,只能访问静态成员。
摘要由CSDN通过智能技术生成

static在c++中有两类用法:

  • 在面向过程时的用法(同C)
  • 在面向对象时的用法

面向过程时的用法

在面向过程时的用法有两种:

  • 修饰变量
  • 修饰函数

1.修饰变量

修饰变量有什么好处呢?改变作用域和保持变量内容的持久性。

  • 可以改变全局变量的作用域(也可以说用于隐藏),因为全局变量在多个文件编译时,是全局可见的,容易造成命名冲突,用static修饰后,只能在本文件中可见。
  • 和全局变量一起存储在存储在静态数据区,并且只被初始化一次。静态数据区存储两种变量,static变量和全局变量。
  • 修饰局部变量时,变量一直存在知道程序结束,但是只有在它的作用域内才能访问。

注意:

  • 在程序刚开始运行时就完成初始化,也是唯一的一次初始化,它的生存期为整个源程序,但是其作用域仍与自动变量相同,只能在定义该变量的作用域内使用该变量。退出该作用域后, 尽管该变量还继续存在,但不能使用它。
  • 如果没有初始化,那么静态(全局,局部)变量的默认值为0;不加static,全局变量的默认值为0;但是局部变量时随机值,也是垃圾值,对我们无用,所以声明局部变量最好初始化。

例如:修饰全局变量的情况

//main.cpp
#include <iostream>
void print();
int main(int argc, char const *argv[])
{
   
    extern int a;
    std::cout << a << "\n";
    print();
}

//test.cpp
#include <iostream>
int a = 1;
void print(){
   
    std::cout << "函数执行"<<"\n";
}

运行结果:


如果加入a变量static修饰,则会出现

例如:修饰局部的情况

#include <iostream>
int function(){
   
    static int a = 10;
    return a--;
}
int main(int argc, char const *argv[])
{
   
    int i = 0;
    for(i = 0; i < 10; i++){
   
        std::cout << function() << "  ";
    }
}
// 输出 10 9 8 7 6 5 4 3 2 1 
// 如果a变量去掉static,输出
// 10  10  10  10  10  10  10  10  10  10
// 因为static只初始化一次,作用域为function()函数,生命周期整个程序运行
// 去掉之后每次调用function
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值