zoukankan      html  css  js  c++  java
  • 【旧博文】引用的陷阱

    考虑一下代码的输出结果

    #include<iostream>

    using namespace std;

    int main()

    {

           int iValue = 1;

           int &dValue = iValue;

           iValue = 2;

           cout<<iValue<<endl;

           cout<<dValue<<endl;

           return 0;

    }

    这段是正确的,也是可以链接成功的

    输出结果是

    2

    2

    将其稍微一改,把

           int &dValue = iValue;

    改成

           double &dValue = iValue;

    错误提示是

    error C2440: 'initializing' : cannot convert from 'int' to 'double &'

    不能转换

    如果改成

    const double &dValue = iValue;是可以的,但输出结果是

    2

    1

    为什么会变,查了相关资料才知道

    原来是编译器为我们做了手脚,提供了一个临时变量

           double &dValue = iValue;

    被编译器改成了类似一下的代码

    int temp = iValue;

    const double &dValue = temp;

    所以改变iValue的值,是不会影响dValue的。

    那把       const double &dValue = iValue;

    改成

           const int &dValue = iValue;呢??

    这样也是没问题的,本来就是同一类型,所以不会产生转换的情况。

    总结一下就是:不同类型在定义&时是不成功的,除非加上const限制,而const在进行不同类型间转换的时候会产生临时变量,也就是在做了一些工作后,引用和原值可能不一样了 。

    这里要特别注意,这是一个很容易混淆的地方,在编写程序的时候要特别仔细,以免出现了问题却检查不出为什么!

  • 相关阅读:
    【线程退出】linux线程退出的几个函数
    Apache Doris编译安装记录
    你所不知道的java编程思想
    thinking in java知识小记(一)
    一个程序员的修炼之路
    解决linux不能使用chmod更改权限的问题
    centos6.5配置无线网络
    ubuntu16.04 server安装小记
    vim的基本使用方法
    微信之父张小龙经典演讲164页PPT:《微信背后的产品观》
  • 原文地址:https://www.cnblogs.com/ldr123/p/2389610.html
Copyright © 2011-2022 走看看