zoukankan      html  css  js  c++  java
  • 一段比较有意思的C++代码


    // 代码段  1 
    double a = 1.5;
    const int & b = a; //必须有const不然报错
    a = 2.5;
    cout << a << " " <<b<< endl; // 输出 a = 2.5 b = 1;

    // 代码段  2
    int c= 2;
    const int &d = c; // 可有可无const
    c = 3;
    cout << c << " " << d << endl; // 输出 a = 3 b =3

    问题:1.为什么第一段代码必须有const?第二段中不用有const?

       2.为什么第一段代码中a,b输出的值不同?而第二段中c,d的值相同?

    原因:

    1.在第一段中,a的值为double类型,而b是整形类型的对a的引用,所以,这个过程必定会发生隐式类型转换。

          对于这段 const int & b = a; 代码,编译器会把这段代码变成如下形式

              const int temp = a;   // 隐式转换,生成中间temp,而这个temp是常量

              const int &b = temp; 

    所以b必须为常量引用(因为中间生成的temp就是常量);而第二段代码中没有发生过隐式转换。

    2.第一段中因为常量引用b引用的是中间生成的temp。改变a值,对b毫无影响。

    第二段中常量引用d引用的是c,没有生成中间值,所以c改变,d也就改变了。

  • 相关阅读:
    BZOJ 4815: [Cqoi2017]小Q的表格
    BZOJ 3676: [Apio2014]回文串
    BZOJ 4503: 两个串
    BZOJ 2618: [Cqoi2006]凸多边形
    BZOJ 1137: [POI2009]Wsp 岛屿
    BZOJ 4824: [Cqoi2017]老C的键盘
    BZOJ 3167: [Heoi2013]Sao
    BZOJ 4033: [HAOI2015]树上染色
    1003. 我要通过!(20)
    1002. 写出这个数 (20)
  • 原文地址:https://www.cnblogs.com/spiderljx/p/13345433.html
Copyright © 2011-2022 走看看