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在进行不同类型间转换的时候会产生临时变量,也就是在做了一些工作后,引用和原值可能不一样了 。

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

  • 相关阅读:
    013.[转] 云原生
    012.[转] 云计算
    011.maven 继承与聚合
    Window常用且通用快捷键
    Hibernate Validator Engine的用法
    Mybatis书写
    Ajax错误
    apache commons lang架包介绍
    Mybatis使用Mybatis-generator插件及配置(数据库逆向工程)
    二分搜索树
  • 原文地址:https://www.cnblogs.com/ldr123/p/2389610.html
Copyright © 2011-2022 走看看