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来限制了在函数内部对参数的修改,避免更改原值 (通常,原值被修改是不能被接受的,不能说我调用一个函数,原来的变量值都变了)。 所以被经常使用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!