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也就改变了。

  • 相关阅读:
    tomcat最大连接数
    【转】性能测试总结---测试流程篇
    nginx访问量统计
    在Excel中计算过去某一天到今天一共多少天
    Linux服务器/etc/profile
    Linux服务器安装MySQL
    idea无法识别maven项目
    python3 实现RC4加解密
    Python实现128-ECB 解密
    BlowFish加解密原理与代码实现
  • 原文地址:https://www.cnblogs.com/spiderljx/p/13345433.html
Copyright © 2011-2022 走看看