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 2024-02-23 15:11  新西兰程序员  阅读(93)  评论(0编辑  收藏  举报