static、const

static:

(1)当static声明全局变量时,表示这个全局变量只能用于本文件,而不能被别的文件引用,即使使用了extern来扩展使用域;全局变量和静态全局变量都存放在静态存储区(数据区)中,都是在编译时分配内存,只是作用域不同。
(2)当static声明局部变量时(即函数体内的static),表示这个局部变量在静态存储区,在函数调用结束后其占用的存储空间不释放仍保留原值,且静态局部变量在编译时赋一次初值,程序运行时每次调用函数都不再重新赋值,而是使用前次函数调用结束时的值,若不赋初值,则编译时自动赋值0.
(3)当static声明函数时,表示此函数只能用于本文件中其他函数的调用。

(4)在类中的static成员变量属于整个类所拥有,对类的所有对象只有一份复制,且不接受this指针,因此只能访问类的static成员变量(二阶构造函数、单例模式中典型)。

const:

(1)const修饰变量 int * const p;const int * p;分别修饰指针p,及指针p所指地址中的内容

(2)const修饰变量时如const int a = 10,将修饰的变量变为常量,根据c++标准修改const的变量属于未定义行为(在有些编译器中用volatile修饰可以修改),即不可以通过const int a 的地址修改,这因为c++中的常量折叠机制,(const变量的值放在编译器的符号表中,使用时直接使用,编译器不对const变量分配空间,如果对 const 修饰的对象进行取地址操作,则编译器在内存给该对象分配空间,但是,这个空间并不会使用也就是说通过地址去修改a的值是修改不了的)。

(3)const修饰类,修饰类数据成员,必须在初始化列表中初始化,完成后不可以修改;修饰类成员函数,则不可以在该函数内修改数据成员,若想使用则声明时用mutable修饰(或把变量的指针强转因为所有非static变量都是 类型 const this的),const的对象只能调用const函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值