zoukankan      html  css  js  c++  java
  • c++变量的引用---5

    原创博客:转载请标明出处:http://www.cnblogs.com/zxouxuewei/

    1.引用变量的主要用途:

           用作函数的形参,通过将引用变量用作参数,函数将使用原始数据而不是其拷贝。

    2.引用变量用法

    创建变量的引用:int& a = b;(是将a的类型声明为int&,即int变量的引用

    注意:在声明变量的引用时必须初始化(如之前例句)

    int a;
    int& b;
    a = b;//should not do this

    3.只能通过初始化声明来设置引用,不能通过赋值来设置

    (1)int& a = b;等同于int* const a = &b;

    (2)只能通过初始化来设置引用,不能通过赋值来设置

    int b = 100;
    int& a = b;
    int c = 50;
    a= c;//this can change the b’s value to 50

    4.将引用用作函数参数

    (1)引用传递:将引用用作函数参数,使得函数中的变量名称为调用程序中的变量的别名。

    (2)按值传递与按引用传递:

    /*按值传递:2个变量,2个名称*/
    void sneezy(int x)
    int main
    {
    int times = 20;//创建times变量,赋值20给它
    sneezy(times);

    }

    void sneezy(int x)
    {
    //创建x变量,将传递来的值20赋给它
    }
    /*按引用传递:1个变量,2个名称*/
    void sneezy(int x)
    int main
    {
    int times = 20;//创建times变量,赋值20给它
    sneezy(times);

    }

    void sneezy(int& x)
    {
    //使x成为times的别名
    }

    (3)常量引用

           如果程序员的意图是让函数使用传递给它的信息,而不对这些信息进行修改,同时又想使用引用,则应使用常量引用。

    定义方式为:

    double refcube(const double& ra);

    (4)临时变量、引用参数和const

           仅当参数为const引用时,如果实参与引用参数不匹配,C++将产生临时变量。

    两种情况:

    a.实参的类型正确,但不是左值。

    左值参数:可被引用的数据对象,如:变量、数组元素、结构成员、引用和被解除引用的指针。非左值包括:字面常量和包含多项式的表达式

    b.实参的类型不正确,但可以转换为正确的类型。

    注意:如果接受引用参数的函数的意图是修改作为参数传递的变量,则创建临时变量将阻止这种意图的实现。

    (5)应尽量使用const

    a.使用const可以避免无意中修改数据的编程错误;

    b.使用cosnt使函数能够处理const和非const实参,否则只能接受非const数据;

    c.使用const引用使函数能够正确生成并使用临时变量。

    5.将引用用于结构

           引用非常适合用于结构和类。引入引用的目的主要就是用于这些类型。

    有如下代码:

    struct sysop
    {

    int used;
    }

    const sysop& use(sysop& sysopref)

    通常,返回机制将返回值复制到临时存储区域中,随后调用程序将访问该区域。而返回引用则意味着调用程序将直接访问返回值。

    const的意思是:不能使用返回的引用来直接修改它指向的结构。

    use(looper).used = 10;//can not do this

    6.引用,指针和按值传递该什么时候使用?

    (1)使用引用参数的主要情况:

    a.程序员能够修改调用函数中的数据对象;

    b.通过传递引用而不是整个数据对象,可以提高程序的运行速度。

    (2)对于使用传递的值而不做修改的函数:

    a.数据对象很小,如内置数据类型或小型结构,则按值传递;

    b.数据对象是数据,使用const 指针;

    c.数据对象是较大的结构,使用const指针或const引用;

    d.数据对象是类对象,使用const引用。

    (3)对于修改调用函数中数据的函数:

    a.数据对象是内置数据类型,使用指针;

    b.数据对象是数组,使用指针;

    c.数据对象是结构,使用指针或引用

    d.数据对象是类对象,使用引用。

  • 相关阅读:
    C struct 中字节对齐问题(转)
    蚁群算法,PSO算法以及两种算法可以融合的几种方法
    遗传及蚁群算法
    ListBox FAQ常用问题
    关于C#中ListBox控件重绘Item项
    创业艰难,问题多多
    asp.net客户端脚本验证小技巧
    防止ASP.NET按钮多次提交的办法
    鼠标点到文本框时的提示信息
    枚举的转换
  • 原文地址:https://www.cnblogs.com/zxouxuewei/p/5727552.html
Copyright © 2011-2022 走看看