C++中的函数参数使用常量引用的理解及好处

在看C++代码时,发现有的代码是这样写的

void SetID(const int &val)
{
      
}

我们可以看到这个SetID函数,它的形参就是常量引用类型

const  修饰符 => 表明这个形参变量 val 不能在SetID内部被修改

& 修饰符 => 表明这个变量传递的是引用, 这个我们知道,它相当于变量的别名,如果在函数内部被修改,那么也会导致原值被修改。为了避免这种情况发生,所以我们在变量前用const修饰符,保证它不会在函数内部被修改. 

可能你会问,我们用普通的值传递,不也一样可以达到这样的效果么,比如

复制代码
void SetID(int val)
{
     val = 10;
}
int main()
{
int a = 1;
SetID(a);
cout << "Now the value of a is: " << a <<end1;
}
复制代码

这里,直接进行值传递,值传递会对参数进行一个完全的拷贝,这里我们在函数内部对传入的参数a进行修改,修改为10,但并不会影响main()函数中a的值,这里cout输出的a的值还是1. 因为,SetID方法中进行值传递时,它对参数a进行了一个完全的拷贝,有自己独立的一份内存,修改并不会影响main()函数中的a的原值. 

发现没, 我们商量的常量引用const &的形式,几乎达到了和值传递一样的效果。 但是引用传递的效率高,尤其在参数是复杂数据类型的时候,采用这种常量引用的方法,效率比较高 (因为采用值传递,对复杂数据类型比如结构体等,完全拷贝一份的方式时间和空间性能都不佳),它既保证了高效率,又使用const来限制了在函数内部对参数的修改,避免更改原值 (通常,原值被修改是不能被接受的,不能说我调用一个函数,原来的变量值都变了)。 所以被经常使用

 

posted on   新西兰程序员  阅读(97)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示