难难难,道德玄,不对知音不可谈,对上知音谈几句,不对知音枉费舌尖。

1. 为什么会有常引用作参数?

引用的存在主要有两个意义:1. 用引用当函数参数可以直接操作外部的变量。 2. 不会在传参的时候再构造一遍消耗时间空间。
那么常引用作参数的意义在什么地方呢?显然第一条没有用了,因为我们不能更改值。第二条还是有意义的。但是如果只有第二条的话,没必要用常引用,因为普通的引用就可以了。请看这个代码:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. void inc(const int &a)
  4. {
  5. // a++;
  6. cout << a << endl;
  7. }
  8. int main()
  9. {
  10. char b = 'c';
  11. inc(b);
  12. cout << b << endl;
  13. }

我们都知道,如果这里的参数不加const会发生什么事:编译错误。因为引用不可以绑定一个右值(如果类型不匹配,那么会构造一个临时的值,所以是右值),但是常引用是可以的。这是因为引用绑定右值很弱智,对外部的修改等于修改了一个临时变量;常引用则不然,因为它保证了函数内部是不会修改这个变量的,所以可以绑定别的类型的变量(其实本质原因是可以绑定右值)。