c++ 初始化引用时类型需一致,常量引用的初始化例外

我们知道,C++中,在进行引用的初始化时,需要注意引用的类型必须和引用对象的类型一致,但又两种情况例外,其中一种就是对常量引用的初始化。
引用的类型一致

int val1 = 5;
int &val2 = val1; 
val2 = 2.3; //正确,此时不是初始化,val1 和 val2 的值都成为了2

如果把上述代码改为

int val1 = 5;
double &val2 = val1;  //错误,引用与引用对象类型不一致  

还需要注意初始化引用时必须用对象,既不能用字面值或表达式的计算结果进行初始化,如

int &val1 = 2;  // 错,字面值
int &val2 = 3+6; // 错,表达式计算结果

对常量引用的初始化
对常量引用初始化时,允许引用与引用对象类型不一致,只要引用对象的类型可以转换为引用的类型即可,甚至还可以用字面值或表达式计算结果进行初始化。

int val1 = 5;
const int &val2 = val1;  
const double &val3 = val1;
const int &val4 = 7;
const int &val5 = 7 + 6;

以下是有关术语的基础概念

引用:

int val1 = 5;
int &val2 = val1; //val1 是引用对象,val2 是引用,即val2 是 val1 的别名,注意val2不是一个对象

常量引用
常量引用一定是const type &类型的,如const int &, const string &类型,不可以通过常量引用改变引用对象的值

string s1 = "hello";
const string &s2 = s1;  //s2就是常量引用
s1 = "world"; // 正确


`

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值