zoukankan      html  css  js  c++  java
  • 对const的引用(常量引用)

      引用的类型必须与其所引用对象的类型一致.但是,对const的引用是第一种例外情况.

      对const的引用,常简称为"常量引用". 常量引用的初始值可以是任意表达式,只要该表达式的结果能转换成引用的类型即可.

      但是,对于字面值,一般表达式以及与常量引用类型不一致的对象作为常量引用的初始值,常量引用实际绑定到了临时变量上.测试代码如下:

     1 #include <iostream>
     2 
     3 int main()
     4 {
     5     int i = 42;
     6     int &r1 = i;
     7 
     8     const int &r2 = i;
     9     std::cout << "r2 = " << r2 << std::endl;
    10     r1 = 40;
    11     std::cout << "r2 = " << r2 << std::endl;//测试r2是否改变.
    12 
    13     const int &r3 = i * 2;
    14     std::cout << "r3 = " << r3 << std::endl;
    15     r1 = 30;
    16     std::cout << "r3 = " << r3 << "    i = " << i << std::endl;//测试r3是否改变.
    17 
    18     std::cout << "Double===========================" << std::endl;//测试r3是否改变.
    19 
    20     double val = 3.14;
    21     const int &r4 = val;
    22     std::cout << "r4 = " << r4 << std::endl;
    23     val = 5.2;
    24     std::cout << "r4 = " << r4 << "     val = " << val << std::endl;//测试r4是否改变.
    25 
    26 
    27     double val_2 = 2.1;
    28     const double &r5 = val_2 * 2;
    29     std::cout << "r5 = " << r5 << std::endl;
    30     val_2 = 9.35;
    31     std::cout << "r5 = " << r5 << "   val_2 = " << val_2 << std::endl;//测试r5是否改变.
    32 
    33 
    34 
    35     const int val_3 = 3;
    36     const double &r6 = val_3;
    37     std::cout << "r6 = " << r6 << "     val_3 = " << val_3 << std::endl;//测试r6是否改变.
    38 
    39     return 0;
    40 }

      运行结果如下:

     

      可以看出对于一般表达式,常量引用绑定到临时变量上.对于上述最后一种情况,分析r6也只能绑定到临时量上.

        最后总结一下.常量引用只有2种情况会绑定到实际的对象:一是常量引用的初始值为const对象,且该对象类型与常量引用类型相同(如const int i ; const int &r = i;);二是常量引用的初始值为非const对象,且该对象也与常量引用类型(除去const的类型)相同(如int i; const int &r = i;).测试代码中,r2的情况即是如此.这种情况下,绑定的非const对象内容可以用其他普通引用改变.    

    不是尽力而为,而是全力以赴.
  • 相关阅读:
    如何在centos7中设置redis服务器开机自启动
    查看linux上面是否有安装redis,redis启动
    windows下用navicat远程链接虚拟机Linux下MySQL数据库
    MySql Host is blocked because of many connection errors 问题的解决方法
    swoft实现自动重启服务
    Centos7安装NPM
    微信公众号开发---上传临时素材到公众号遇到的问题:"errcode":41005,"errmsg":"media data missing
    Android SDK镜像更新网速慢的解决问题
    文件下载
    sql执行顺序
  • 原文地址:https://www.cnblogs.com/yang666/p/6546966.html
Copyright © 2011-2022 走看看