C/C++:深入分析 指针与引用的优缺点
前言 指针和引用本来就是两个完全不同的东西,引用甚至不能被称为对象。所以两者是没有可比性的,也没有什么意义去说谁比谁好,它们负责的工作也是不同的。但我以比较的方式写这篇文章,目的是能更浅显看出他们的特点。 一.常量引用与常量指针 疑难点1 首先我们需要知道的第一个东西是:绑定一个非常量引用必须要类型匹配,否则会显示”非常量引用的初始化值必须为左值“。就算你进行强制类型转换。这比指针可安全多了,因为指针就算被定义成常量指针,经过类型转换,也能够对其指向值进行修改。详细请看这篇博客: const==常量? 所以:在不对内存进行操作时,引用更加安全。 疑难点2 常量引用的第二个特点:常量引用可以绑定:任何一个可以转换成其类型的值都可以绑定。这是什么原理? 如我们执行以下操作时: double a; const int &b = a; 实际上编译器会先创建一个const int tmp的临时变量,然后将b绑定到这个临时变量上。为什么可以这样做? 因为绑定一个常量引用本来就不想通过这个引用改变其值,所以将其绑定在一个临时变量上是完全可行的。 但是如果你绑定的是一个非常量引用,你肯定是想通过这个引用修改值的,但如果采取绑定一个临时变量的方法,你就修改不了你想修改的那个变量的值。所以这样做是没有意义的,所以非常量引用的绑定必须类型匹配。 对于是否绑定在一个临时变量上,我们可以做以下测试: