函数形参中const的作用

在c、c++的学习之中,我们会遇见在函数传参过程中const对于函数参数的形容,那么这样的形容对于函数形参的作用就值得我们进行讨论一下。

目录

1.导入

2.作用:保护传值

1.导入

在进行函数形参中cosnt的形容之前,我们有必要讨论一下const形容下的顶层const底层cosnt

其中,顶层const:表示任意一个对象为常量;底层cosnt:与指针、数组或者引用等的复合类型有关,即该指针指向或该引用绑定的对象是常量。

例如:

const int a = 100;//顶层cosnt,形容整形变量a为常量
const int *p1 = &a;//底层const,形容整形指针p1指向的对象a为常量
int b = 101;
int *const p2 = &b;//顶层const,形容指针p2本身的值为常量

在上述代码中,根据cosnt对目标内容的限制,我们很轻易能结论:a的值、p1指向的值、p2本身的值是不能做修改的。但是我们可以修改p1本身的值,也可以修改p2指向的值。

所以从cosnt定义的内容角度出发,我们需要着重考虑const对形容变量的不可修改性。也就是说,cosnt形容谁,谁旧具有不可修改性,它的值自然也就不能发生改变。

就像:

const int c = 10;
const int *p3 = &c;
int *p4 = p3;//报错!!!

上述代码中,关于p4的定义就会发生报错,因为对于p3而言,const是作为一种底层const出现的,即p3指向的值不能发生改变。

而p4的定义中,并没有涵盖这一部分内容,也就是说按照p4的定义,意味着我们可以对p3指向的内容进行修改。这样的定义说法很明显是错误的,因为它忽视了p3指向值的不可修改性,导致保密性下降,编译器就会报错。

2.作用:保护传值

在了解到顶层cosnt和底层const之后,我们就可以来看在函数形参中cosnt所扮演的角色了。

在c和c++中,我们见过如下的定义函数形参的方式:

void strcpy(char *strDestination, cosnt char *strScoure)
{

}

从底层cosnt的角度出发,我们能很明显看出上述代码中关于strScoure指向值的不可修改性。也就是说在接下来的函数内容中,不能出现这样的操作内容:

*strScoure = "Ni Hao";

因为这样会对strScoure指向的值发生改变,显然违背了cosnt对它的形容目的。

或者像这样:

char *p = strScoure

因为这样子对p进行定义会存在通过p对strScoure指向值修改的情况,所以这样对p进行定义也是非法的。

那么关于形参中cosnt形容具体作用应该是:

保护传值

因为为了提高参数传递的效率,所以采用了引用参数的方式,而在引用的过程中,我们不希望传递到函数中的参数发生改变,即不影响我们的传值的内容发生改变。也就是说在函数执行过程中,只能对传值进行读取,而不能进行修改。

你可能感兴趣的:(c++,开发语言,c语言,visual,studio)