const、static

const 有如下特点以及应用场景:
在 C++中 const 是用来定义常量的,不能作为左值被修改,而且必须初始化。const 常量的初始值如果是一个明确的值,那么常量在编译期会被常量的初始值替换。
C++中修饰的量也可以是常变量(和 C 语言相同),此时它只是不能作为左值,其他性质和普通变量一样,不能定义数组大小,没有编译时期值替换规则等,
const 可以修饰成员方法,成为常成员方法,在常成员方法中只能访问其他成员,不能修改其他成员;普通对象和常对象都可以调用常方法,但是常对象只能调用常方法。
const 可以修饰成员变量,使之成为常成员变量,因此在初始化时要写在构造函数的初始化列表中,否则就会报错。

const关键字作用:  
1、欲阻止一个变量被改变,可以使用const关键字。在定义该const变量时,通常需要对它进行初始化,因为以后就没有机会再去改变它了;  
2、对指针来说,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const;  
3、在一个函数声明中,const可以修饰形参,表明它是一个输入参数,在函数内部不能改变其值;  
4、对于类的成员函数,若指定其为const类型,则表明其是一个常函数,不能修改类的成员变量;  
5、对于类的成员函数,有时候必须指定其返回值为const类型,以使得其返回值不为“左值”。

static有如下特点以及应用场景:
static修饰全局变量使全局变量从 global 符号变成 local 符号,全局变量属于数据,不是放在.data 段,就是在.bss,多个源文件可以定义同名的 static 全局变量,不会产生重复定义的错误。
函数中的局部变量是属于指令,是存放在.text 代码段上的,运行时系统给函数在栈上分配空间,函数的局部变量此时表示栈上的一段内存;但是 static 静态局部变量就成为数据了,放在.data 或.bss 段上了,程序一起来它就有内存,第一次运行到它的时候进行初始化,整个进程结束,它的内存才释放。因此只能当前文件可见,不参与链接过程;
static修饰普通函数,函数经过编译,产生一个函数符号,被 static 修饰后,就成为了一个“l”的 local 符号了,只能当前 obj 文件可见,不参与链接的符号解析,因此其它文件不能链接这个文件中的 static 函数。
static修饰成员变量,成为静态成员变量此时这样的成员变量就不属于对象的,而是属于类的,使普通成员变量从栈内存变成在.data或.bss 存储了,生命周期变长了。必须在类外初始化,同类型所有对象共享静态成员变量;
static修饰成员方法,成为静态成员方法,不依赖对象调用,用类作用域调用
C/C++static总结:http://blog.csdn.net/explore_world/article/details/56024558

static关键字作用:  控制变量的存储方式和可见性
1、C、函数体内static局部变量的作用范围为该函数体,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值,而且延长了局部变量的生命周期,直到程序运行结束以后才释放,但不改变作用域。比如修饰函数中存放在栈空间的数组。如果不想让这个数组在函数调用结束释放可以使用static修饰。
2、C、在模块内的static全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;  
3、C、在模块内的static函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模块内;  
4、C++、在类中的static成员变量属于整个类所拥有,对类的所有对象只有一份拷贝;  
5、C++、在类中的static成员函数属于整个类所拥有,这个函数不接收this指针,因而只能访问类的static成员变量。   

1.静态成员之间可以相互访问,包括静态成员函数访问静态数据成员和访问静态成员函数;
2.非静态成员函数可以任意地访问静态成员函数和静态数据成员;
3.静态成员函数不能访问非静态成员函数和非静态数据成员;
4.调用静态成员函数,可以用成员访问操作符(.)和(->)为一个类的对象或指向类对象的指针调用静态成员函数,也可以用类名::函数名调用(因为他本来就是属于类的,用类名调用很正常)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值