Static关键字和Const关键字

Static关键字:

1. 修饰对象:可以修饰变量,也可以修饰函数

2. 使用场景:

         函数体类:在函数体类定义一个静态变量(如,static A),则该变量只能在函数体类访问,且只初始化一次;

         模块内:主要是避免命名重复。在源文件内声明,作用域只限定在该文件内部,可避免多个源文件定义相同函数或者变量冲突问题;在头文件中声明,那么所有包含该头文件的源文件都可以访问该编码或者函数。

3. 类中修饰:可以修饰成员函数和成员变量。

静态成员函数和静态成员变量都属于整个类所拥有。静态成员函数是不接受this指针的,也就是说在静态成员函数不能访问类对象的非静态成员(函数、变量),静态成员函数只能访问静态成员变量。

Const关键字:

1. 定义变量:

在C语言中,定义局部和全局const变量,其中局部的const变量是在栈上分配的,可以通过指针去修改,而全局const变量是在静态全局中分配的,不可以修改,若尝试使用指针去修改该值都是未定义的行为,会报段错误;在C++语言中,会把所有用const修饰的变量加载到符号表中,每次访问该值的时候都是从符号表中获取的,所以也就不能用指针修改该变量的值(允许修改但是无法修改成功)。

使用const定义变量的作用:避免修改、避免内存的多次分配、类型和作用域的检查。

如: #define VAR 20      int a = VAR   int b = VAR

     Const int VAR_EX = 20     int a = VAR_EX   int b =  VAR_EX

宏和const都可以避免变量被修改,但是宏在赋值a和b是分配了两次20的空间,而const只分配了一次内存空间,另外宏定义不能直观的定义变量类型,是一种弱类型,而const在定义时就已经明确变量的类型了。

修饰指针变量:离谁近则修饰谁的原则

Const char *ptr; 指针常量,指针的内容不能修改

Char * const ptr; 常量指针,指针的地址不能修改

2. 修饰函数参数:不允许修改函数的参数

3. 修饰函数返回值:避免做左值,返回值不允许修改,如c++运算符重载返回值

4. 类中const常成员函数(如:void fun()const):

        确保不修改成员变量,只能调用类的const成员变量和const成员函数,const对像(或者叫只读对象)只能调用const常成员函数,不能调用非const成员函数,因为非const成员函数可能会去修改成员变量,而非const对象可以访问任意成员函数;

可用于函数重载,如:

Class B{

   Void fun () const;

   Void fun();

}

B b;        b.fun();//调用的是Void fun () ;

const B b1;  b1.fun();  //调用的是Void fun () const;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值