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来限制了在函数内部对参数的修改,避免更改原值 (通常,原值被修改是不能被接受的,不能说我调用一个函数,原来的变量值都变了)。 所以被经常使用