对于c++中的引用权限的主要规则大家应该都特别熟悉了,总结下来就是,用const来控制,权限可以缩小但不能放大.但是在我写代码的时候遇到了这两种情况.也是有关于引用的权限问题,所以拿来记录一下.
第一种:有关域类型转换的
int main()
{
double d = 3.14;
//类型转化
int i = d;
//int& n = d;
const int& n = d;
return 0;
}
如上面代码和图片所示,只有用const修饰后才可以正常运行.
第二种:有关于表达式赋值
int main()
{
int a = 1, b = 2;
//int& m = a + b;
const int& m = a + b;
return 0;
}
如上面代码和图片所示,只有用const修饰后才可以正常运行.
那么这是为什么呢?因为类型转换(无论是强制还是隐式类型转换)以及表达式的赋值都会产生临时变量,而临时变量具有常性,所以如果用不加const的引用那就会将权限放大.为了保证权限缩小或一致必须要用const修饰的引用.