不同基本类型的引用,隐晦的转换

#include <iostream>
using namespace std;


int main(int argc, char** argv)
{
    int a = 0;                  int b = 0;
    const int& ref_a = a;       const short& ref_b = b; 
    a = 1;                      b = 1;

    cout << "value: " << endl;
    cout << a << ", " << ref_a << endl;// 1, 1
    cout << b << ", " << ref_b << endl;// 1, 0

    cout << "offset: " << endl;
    cout << (unsigned int)&a << ", " << (unsigned int)&ref_a << endl;
    cout << (unsigned int)&b << ", " << (unsigned int)&ref_b << endl;

    return 0;
}


看上面的代码,代码很简单

    ref_a 引用 a

    ref_b 引用 b

程序执行结果: 在修改a、b后,只有ref_a发生了变化,a,b,ref_a的值都编程1,而且ref_b没有发生变化。

唯一的区别是ref_b的类型是short。

 

打印a,b,ref_a,ref_b的地址,可以发现,a和ref_a相同,而b和ref_b不同。

分析了下原因,ref_b不是直接引用b。

ref_b声明时发生了赋值,ref_b实际指向的是一个临时变量,跟b在内存上再也没有关系。

于是我们可以看到上面的结果。

 

上面的例子从侧面说明引用和指针是有区别的

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值