const和static的区别和用法

来源:互联网 发布:java auth2.0开源框架 编辑:程序博客网 时间:2024/06/05 16:46

const关键字:

const关键字是定义变量之后,其数值便不能更改,比方说:

const week_days=7;

一周有七天,week_day被赋予7之后便不能更改


当const用于指针变量定义时,要注意指向常量的指针和常量指针的区别。用比较形象的例子来描述,指向常量的指针就像一个针标能动而背景板不能动的转盘,你可以操作指针来指向别的区域,而背景板(也就是内存中的数据)是不能移动的;而常量指针z相当于针标不能动,而可以转动背景板的转盘,在这里,指针可能永远指向12点方向,而他所指向的内容可以通过背景板的旋转来改变~(例子可能有不妥当之处,希望大佬能够指出错误)

有了大体的概念,我们很容易判断下列赋值的正误

int text=1, _text=2;const int *ptr1=&text;//指向常量的指针int* const ptr2=&text;//常量指针ptr1=&_text;//正确*ptr1=3;//错误ptr2=&_text;//错误*ptr2=3;//正确

而当const用于类的定义时,类中的数据成员在被初始化后便不能被更改,包括用成员函数对其修改也不行;而对于成员函数来说,有时对数据成员的调用并不涉及对其的更改,比方说将数据成员output出来,但c++并不能分辨出成员函数是否对常量数据成员进行改动,所以我们要在成员函数名后加const,以此来对数据成员进行访问


const引用则是指向const对象的引用,它可以读取但不能修改被引用对象,并且任何对被引用对象进行赋值的操作都是不合法的。

const int text=1;int &_text=text;//错误,引用不是const类型const int &_text=text;//正确


static关键字:

通过查阅百度,static关键字有三个主要作用:

1,被声明为静态变量的变量会存储在静态变量区,这也就意味着,在某函数中定义的静态变量,在函数调用结束后,不会被回收。

void output(){static int times=1;cout << “output函数已被运行” << times << "次" << endl;times++;}
比如说上面这个函数,在程序运行前,会给静态变量times赋初值1,以后每次执行output函数,static int times=1这个语句事实上都不会执行;output函数执行1次后,times数值变为2,会继承给下一次的调用。


2,当一个源程序包含多个源文件时,被声明为静态的全局变量只能在此源文件中被使用,与此相对应的,普通的全局变量对该源程序下的其他源文件也是可见的。静态全局变量可以说是本地的,它的好处是防止该变量在其他源文件中被改动,造成错误。也有人把static的这个作用称为隐藏。


3,在一个源文件中,若函数被声明为静态,则该函数与静态全局变量一样,只能在本地使用。好处是不必担心自己写的静态函数会与其他文件中的函数重名。


原创粉丝点击