static与const成员变量

本文深入探讨了C++中static和const关键字的用法及其在类中的特性。static关键字主要用于实现变量隐藏、默认初始化及保持局部变量值等功能;而const则强调变量的常量属性,并在构造函数中初始化。

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

Static

很多公司会喜欢问static的作用是什么,如果不考虑在类当中的应用,其主要作用有以下三点:

1)隐藏

加了static的全局变量,在其他源文件中就“看不见”了。也就是说,加了static,可以用来解决不同文件里定义了同名的函数或者变量。

2)默认初始化为0

对于未初始化的全局变量和静态变量,都是存储在同一块区域——BSS段。在BSS段中,所有字节的默认值为0X00,这样就减少了我们初始化的工作量。

3)保持局部变量内容

这一点也是大家都知道的特性,static变量会静态保存值,于是可以用于计数。

那么在类中,Static 又发挥着什么样的作用呢?

在类中,所有对象是共享static变量的,它是被存储在全局(静态)存储区里的,也就是说我们在计算某个类所占内存大小的时候,static变量是不用考虑的,这也是很多公司喜欢考察的地方。也由于同一类的对象共享static变量,对于static变量的初始化,我们需要在类外进行。这是为什么呢?

试想,若static变量在类内初始化,对于对象中的static变量值,就会出现不一致的情况。这显然是与“所有对象共享static变量”相违背的。定义的方法很简单,如下:

class B{//class与struct的区别:class的默认访问是Private,而struct的默认访问是public
public:
static int a;//static变量在类内声明
};
int  B::a=2;//<strong>类外不要添加static关键字,添加则编译不通过</strong>

说到static成员变量就会想到const成员变量,这两者又有什么不同呢?

Const

提到const首先想到的是常量的概念,即一旦定义初始化了,就不能修改。没错,于是在C++所有的const变量在定义时必须初始化,不然就不是常量啦。

与static有一点相似的是,const定义全局变量的时候,这个变量值在这个文件里可见,而不能被其他文件所访问。如果想整个程序都能访问,那就要加上extern。

那么在类中Const又与Static有什么不同的呢?

在类中,每一个对象有自己的const,在每个对象里const变量的值是常量。根据这个规定,const成员变量的声明在类内,但是初始化必须在构造函数里。为什么呢?理由也很简单,const成员变量虽然是常量,但是每一个对象的const变量值可以是不同的,于是放在构造函数中初始化也是为了保证每个对象可以自由个const变量初始化。定义如下:

<pre name="code" class="cpp">class B{
public:
const int b;
B():b(9){}//在构造函数中,冒号和函数体之间的部分即为初始化列表,初始化顺序是按照类里声明的顺序
};


有一个例外尤其注意: static const 类型的变量如果是char、int\、long、short,则可以在类的定义体中进行初始化的,static const变量是整个类中都恒定的常量,与const static相同(const int * a 与int const * a 表达的意思也相同),否则也需要在类外初始化,初始化时static修饰符不能加,需要加const.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值