c++之static和const

一 static

static 作⽤:控制变量的存储⽅式和可⻅性,且其值可以被修改

1.1 作用1

作⽤⼀:修饰局部变量:⼀般情况下,对于局部变量在程序中是存放在栈区的,并且局部的⽣
命周期在包含语句块执⾏结束时便结束了。但是如果⽤ static 关键字修饰的话,该变量便会存
放在静态数据区,其⽣命周期会⼀直延续到整个程序执⾏结束。但是要注意的是,虽然⽤
static 对局部变量进⾏修饰之后,其⽣命周期以及存储空间发⽣了变化,但其作⽤域并没有改
变,作⽤域还是限制在其语句块

【解释】

1. 需要在函数多次调用间保留状态

普通局部变量每次进入函数都会重新初始化,离开函数就销毁;而 static 局部变量只会在第一次进入函数时初始化一次,后续调用会保留上一次的值。这让函数可以 “记住” 之前的状态。

例如,实现一个计数器,每次调用函数就加 1:

#include <stdio.h>

void count() {
    static int num = 0;  // 仅第一次调用时初始化,后续调用不执行
    num++;
    printf("第 %d 次调用\n", num);
}

int main() {
    count();  // 第 1 次调用
    count();  // 第 2 次调用
    count();  // 第 3 次调用
    return 0;
}

如果 num 是普通局部变量,每次调用都会重置为 0,无法实现计数功能;而 static 修饰后,它能在多次调用间保留状态。

2. 避免全局变量的 “污染”

如果为了保留状态而使用全局变量,会导致变量在整个程序中可见(作用域过大),可能被其他代码意外修改,造成 “全局变量污染”。

而 static 局部变量的作用域仍局限于函数内部,仅在该函数内可访问,既实现了状态保留,又保证了封装性(其他函数无法直接修改它),比全局变量更安全。

1.2 作用2

作⽤⼆:修饰全部变量:对于⼀个全局变量,它既可以在本⽂件中被访问到,也可以在同⼀个
⼯程中其它源⽂件被访问(添加 extern进⾏声明即可)。⽤ static 对全局变量进⾏修饰改变了其
作⽤域范围,由原来的整个⼯程可⻅变成了本⽂件可⻅。

1.3 作用3

作⽤三:修饰函数:⽤ static 修饰函数,情况和修饰全局变量类似,也是改变了函数的作⽤
域。

1.4 作用4

作⽤四:修饰类:如果 C++ 中对类中的某个函数⽤ static 修饰,则表示该函数属于⼀个类⽽
不是属于此类的任何特定对象;如果对类中的某个变量进⾏ static 修饰,则表示该变量以及所
有的对象所有,存储空间中只存在⼀个副本,可以通过;类和对象去调⽤。
(补充:静态⾮常量数据成员,其只能在类外定义和初始化,在类内仅是声明⽽已。)

1.5 作用5

作⽤五:类成员/类函数声明 static

二 const

含义及实现机制

2.1 作用1

const 修饰基本类型数据类型:基本数据类型,修饰符 const 可以⽤在类型说明符前,也可以
⽤在类型说明符后,其结果是⼀样的。在使⽤这些常量的时候,只要不改变这些常量的值即
可。
 

2.2 作用2

const 修饰指针变量和引⽤变量:如果 const 位于⼩星星的左侧,则 const 就是⽤来修饰指针
所指向的变量,即指针指向为常量;如果 const 位于⼩星星的右侧,则 const 就是修饰指针
本身,即指针本身是常量。

理解这些声明的技巧在于,查看关键字const右边来确定什么被声明为常量 ,如果该关键字的
右边是类型,则值是常量;如果关键字的右边是指针变量,则指针本身是常量。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

youzjuer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值