非const引用只能绑定到与该引用同类型的对象const引,用可以绑定到不同但相关的类型的对象或绑定到右值
关于const引用,测试用例
#include <iostream>
#include <string>
using namespace std;
int main() {
double b = 2.14;
const int &a=b;//成立
const int &a1=123;//成立
cout<<a<<endl;//2
b=3;
cout<<a<<endl;//2
a=3;//error a is const
return 0;
}
解释两点:
1.关于double b ,int和double存在隐式转换,算是相关的类型.而且,编译器会进行以下代码的转换
double b = 2.14;
const int &a = b;
会进行如下转换:
int temp = b
const int &a=temp;
所以,给b进行赋值,a可能会报错.
非常量引用:
必须类型一致且不能是右值.