zoukankan      html  css  js  c++  java
  • const引用

      const引用是指向const对象的引用。

    const int ival=1024;
    const int &refVal=ival; //ok: both reference and object are const
    int &ref2=ival; //error: non const reference to a const object
    
    

      可以读取但不能修改refVal,因此,任何对refVal的赋值都是不合法的。这个限制有其意义:不能直接对ival赋值,因此不能通过使用refVal来修改ival。

      同理,用ival初始化ref2也是不合法的:ref2是普通的非const引用,因此可以用来修改ref2指向的对象的值。通过ref2对ival赋值会导致修改const对象的值。为阻止这样的修改,需要规定将普通的引用绑定到const对象是不合法的。

      术语:const引用是指向const的引用。

      C++程序员常常随意的使用术语const引用。严格来说,"const引用"的意思是"指向const对象的引用"。类似的,程序员使用术语"非const引用"表示指向非const类型的引用。这种用法非常普遍。

      const引用可以初始化为不同类型的对象或者初始化为右值,如字面值常量:

    int i=42;
    const int &r=42;
    const int &r2=r+i;
    

      同样的初始化对于非const引用却是不合法的,而且会导致编译时错误。 其原因非常微妙,值得解释一下。

      观察将引用绑定到不同的类型时所发生的事情,最容易理解上述行为。加入我們编写

    int temp=dval; //create temporary int from the double
    const int &ri=temp; //bind ri to that temporary
    

      如果ri不是const,那么可以给ri赋一新值。这样做不会修改dval,而是修改了temp。期望对ri的赋值会修改dval的程序员会发现dval并没有被修改。仅允许const引用绑定到需要临时使用的值完全避免了这个问题,因为const引用是只读的。

      非const引用只能绑定到与该引用同类型的对象。

      const引用则可以绑定到不同但相关的类型的对象或绑定到右值。

  • 相关阅读:
    Nginx rewrite模块深入浅出详解
    一个ip对应多个域名多个ssl证书配置-Nginx实现多域名证书HTTPS
    nginx: [emerg] getpwnam(“www”) failed错误
    mysql5.7 启动报发生系统错误2
    obv15 实例6:如果K线柱过多,ZIG将发生变动,导致明显的OBV15指标被隐藏!
    obv15 案例4,待日后分析
    稳定
    教你识别指标骗局:以某家捕捞季节和主力追踪为例讲解
    C++ 语句
    C++ 表达式
  • 原文地址:https://www.cnblogs.com/sven/p/1654328.html
Copyright © 2011-2022 走看看