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

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

  • 相关阅读:
    实验二
    实验一
    个人简介
    第四次 博客作业
    第三次博客作业package com.fry; //导入java.util.Arrays; import java.util.Arrays; public class Demo1 { public static void main(String[]args){ //创建对象,对象名为hello Demo1 hello =new Demo1(); //调用方法并将返回值保存在变量中
    白盒
    单元测试
    个人简介
    第五次博客作业
    第三次博客作业
  • 原文地址:https://www.cnblogs.com/ldr123/p/2389610.html
Copyright © 2011-2022 走看看