c 常量引用赋值为其他类型变量的坑

    c++里给常量引用初始化赋值的类型不一致的时候,编译器会创建临时量,这个时候常量引用其实是引用的临时量,这个临时量我们是没法访问的。如果改变了被引用的变量的值,通过引用来输出的话还是输出原来的值(即临时量的值)。

    如果给常量引用初始化赋值的类型是一致的,那么编译的时候就不会生成临时量,这个时候不管怎么改变被引用的变量的值,通过引用输出的值都是被引用的值,而不是临时量。

举例如下:

c++中常量引用:const int &p=someval;

当等号后面跟的是一个非int类型的基本类变量,编译器会创建临时量。比如:

float someval=3.14159;

const  int &p=someval;

 

这个时候,编译器会如下操作给p赋值:

const int tmp=3;

const int &p=tmp;

这个时候如果改变了someval的值,在通过p输出的时候不会是someval的值。

someval=55.5555;
cout<<p<<endl;   //输出还是为3

完整测试程序:

int main(int argc,char** argv){

float someval=3.1415926;
const int &p=someval;   // 在这里我用float类型赋值给整型的引用,触发临时变量产生,p是临时量。跟someval不在同一内存单元
cout<<someval<<","<<p<<endl;  // 输出:3.1415926,3

someval=5555.5555;
cout<<someval<<","<<p<<endl;  //输出:5555.5555,3


//下面测试类型一样的情况
int goodval=1000;
const int & pg=goodval;  //在这里两边赋值的类型是一致的,不会触发产生临时量,pg就是goodval,内存里是同一个内存单元。

cout<<goodval<<","<<pg<<endl; //输出1000,1000

goodval=999;   //这里改变goodval值,后面输出还是会一致
cout<<goodval<<","<<pg<<endl;  //输出 999,999

return 0;
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值