C中const关键字的使用方法

你好呀,我是阿德。

我打算写一个C++进阶之路的系列,由浅入深地介绍C++的相关内容,既然选择了C++,那就只有倾尽热爱和敬畏。

这是C++进阶之路的系列的第一篇,就从const关键字入手,避免开始太难就把你们劝退了。

常类型是指使用类型修饰符const说明的类型,在C++中const可以用来修饰内置类型变量,自定义对象,成员函数,返回值和函数参数等。常类型的变量或对象的值是不能被更改的,编译器会强制实施这个约束。

const的常见用法分为如下几类:

01定义常量

这个比较简单,用法如下:

constinta=1;防止程序中修改该变量,必须在定义时就进行初始化,因为常量在定义后就不能被修改。

当变量类型是整数或者枚举时,const定义的变量是常量表达式,其他类型只是const限定的变量。

02定义常引用

常引用的用法如下:

intn;constintr=n;r=2;//errorn=3;//ok指定常引用后,就不能通过常引用去修改其引用的内容,但是可以通过原变量进行修改。

constint和int是不同的类型,int类型的引用或int类型的变量可以用来初始化constint类型的引用。

但是constint类型的常变量和constint类型的引用则不能用来初始化int类型的引用,除非进行强制类型转换。

因为使用常变量来初始化非常引用,那么该引用可能会修改指向的常量。

03指针与const

const也可以和指针变量一起使用,这样可以限制指针变量本身,也可以限制指针指向的对象。const和指针一起使用会有三种不同的情况,如下所示::

指向const对象的普通指针

constint*a;

intconst*a;

指向普通对象的const指针

int*consta;

指向const对象的const指针:

constint*consta;

const在*的左侧,就表示const对象,即常量指针;const在*的右侧,就表示const指针,即常指针。

const对象表示不能通过指针改变对象的值,但该对象的值可以通过其他方式改变;const指针表示该指针不能重新指向其他对象,且const指针必须在定义时进行初始化。

intn,m;constint*r=n;*r=2;//errorn=3;//okr=m;//可以指向其他变量这里可以和常引用对比来记忆,常引用就对应第三种情况,既不能通过引用修改变量的值,也不能重新作为其他变量的引用。

同理,constint*和int*是不同的类型,int*类型的指针或int类型的变量可以用来初始化constint*类型的指针。但是不能把常量指针赋值给非常量指针,除非进行强制类型转换,常量指针指向的内容不想被修改,如果被赋值给一个非常量指针,那么这个非常量指针就有可能修改指向的内容。

constint*p1;int*p2;p1=p2;//okp2=p1;//errorp2=(int*)p1;//ok

来看个错误示例:

constinta=0;int*constb=a;//error

a是一个常变量,表示a的值不能被修改,b是一个常指针(const在*的右边),表示b不能再指向其他变量,但是可以通过指针修改指向的变量a的值,这明显冲突了,所以程序会报错。

04函数参数为const变量

当函数参数为const对象时,表示希望传进函数的值在函数中不能被修改。

函数又分为上面的普通变量、引用和指针三种情况。因为函数参数为形参,所以函数参数为常变量和常指针就没有任何意义,即使在函数中被修改,也不会影响到实参。

所以函数参数为const对象的情况主要分为常引用和常数指针:

voidfunc(constinta);voidfunc(constint*a);

分别表示不能通过引用和指针修改变量的变量a的值。

END我是,我是阿德,一名多年经验的软件开发工程师,高校大厂程序员。此


转载请注明:http://www.aierlanlan.com/tzrz/42.html