C++的函数关键字const的疑问
PHP中文网
PHP中文网 2017-04-17 12:06:43
0
3
814

先说一下引用调用

C++有这样一段代码

#include<stdio.h>
void swap(int &x, int &y)
{
    int tmp = x;
    x = y;
    y = tmp;
}
int main(void)
{
    int a = 1, b = 2;
    printf("a=%d, b=%d\n", a, b);
    swap(a, b);
    printf("a=%d, b=%d\n", a, b);
    return 0;
}

这里面的 & 表示是引用调用,也就是直接将实参传到函数,而不是将实参拷贝给形参,然后形参传进函数,所以这样的方式可以更改实参的值。

C++中有关键字 const

情况一

void avoidchange(const int x)

书上说const关键字可以防止函数内部修改参数,那么这样的方式是调用的时候将实参拷贝给形参,然后对形参进行操作,那么就算改变了形参的值又有什么影响呢?

所以说这种情况下这样使用const应该是没有必要的吧?

情况二

还是说应该这样使用

void avoidchange(const int & x)

这样将实参直接传给函数,就少了拷贝给形参的过程,所以会更快(int参数还不明显,假如是某个比较大的结构体或者类对象就更为明显了),但是这种情况下可能不想在函数内部更改传入的实参,所以就要加个const既提醒开发者,又提醒编译器。

我这样的理解是不是对的?

另外对于const、以及C++函数的定义和调用还有哪些需要知道的知识点?

PHP中文网
PHP中文网

认证高级PHP讲师

모든 응답(3)
洪涛

就真正开发实践来说,大多数情况下 const都是修饰内存地址,因为在函数内部中,很有可能对内存地址进行修改,对于参数访问,就算你对变量(这里区别于内存地址)进行修饰,一样能通过内存访问进行修改。楼主可以看看实际应用上来讨论这些问题,

Ty80

const还有一个作用:类方法将const写在后面可以表示该方法不会对this对象产生副作用,这样修饰getter等函数可以提高编译器生成的代码的效率。

左手右手慢动作

情况一: 有必要, 确实如你所说, 就算在函数内部改变了变量, 对外部的实参也没影响, 这个限定符是针对函数内部的形参的, 那么, 为参数加上限定符表示不希望这个变量在函数中被修改, 也就是说, 函数编写人想要传什么值, 你就用什么值, 不要在函数内部修改它.
情况二: const 还可以修饰类的属性和方法, 具体你可以查下资料.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿