zoukankan      html  css  js  c++  java
  • 《C++ Primer》笔记引用

    引用就是给变量起别名,然后别名和原变量就完全是一回事了,在C++中常用作函数形参,以返回多个值:

    如:BOOL initLinkList(&L)

    1.不能定义引用类型的引用,但可以定义任何其他类型的引用。 

    2.引用必须用与该引用同类型的对象初始化:

    int ival = 1024;
          int &refVal = ival; // ok: refVal refers to ival
          int &refVal2;       // error: a reference must be initialized
          int &refVal3 = 10;  // error: initializer must be an object
    

    定义多个引用

    可以在一个类型定义行中定义多个引用。必须在每个引用标识符前添加 “&”符号:

    int i = 1024, i2 = 2048;
    int &r = i, r2 = i2; // r is a reference, r2 is an int

    inti3=1024,&ri=i3; //definesoneobject,andonereference

    int &r3 = i3, &r4 = i2; // defines two references 

    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。 

    const引用与普通引用的不同:

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

          int i = 42;
          //  legal for const references only
          const int &r = 42;
          const int &r2 = r + i;
    

    同样的初始化对于非 const 引用却是不合法的,而且会导致编译时错误。 

    假如我们 编写

          double dval = 3.14;
          const int &ri = dval;
    
      编译器会把这些代码转换成如以下形式的编码:
    

    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 引用则可以绑定到不同但相关的类型的对象或绑定到右值。 

  • 相关阅读:
    MySql: Year, Quarter, Month, Day, Hour statistics
    PHP7.27: Cookie and Session
    css:Media Queries: How to target desktop, tablet and mobile?
    PHP7.27: object
    php7.27: export excel from mysql
    机器学习基础---逻辑回归(假设函数与线性回归不同)
    机器学习作业---线性回归
    机器学习基础---多变量线性回归
    机器学习基础---线性回归
    机器学习基础---概述
  • 原文地址:https://www.cnblogs.com/worldtraveler/p/2835243.html
Copyright © 2011-2022 走看看