C++引用变量的使用
来源:互联网 发布:js修改parameter 编辑:程序博客网 时间:2024/05/14 07:59
引用变量的主要用途是用作函数的形参。通过将引用变量用作参数,函数将使用原始数据,而不是其副本。
使用引用参数的主要原因有两个。
1、程序员能够修改调用函数中的数据对象。
2、通过传递引用而不是整个数据对象,可以提高程序的运行速度。
当数据对象较大时(如结构和类对象),第二个原因最重要。什么时候使用引用、什么时候使用指针?什么时候按值传递?下面是一些指导原则?
对于使用传递的值而不修改的函数。
(1)如果数据对象很小,如内置数据类型或小型结构,则按值传递。
(2)如果对象是数组,则使用指针,因为这是唯一的选择,并将指针声明为指向const的指针。
(3)如果数据对象是较大的结构,则使用const指针或const引用,以提高程序效率。这样可以节省复制结构所需的时间和空间。
(4)如果对象是类对象,则使用const引用。类设计的语义常常要走使用引用,这是C++新增这项特性的主要原因。因此,传递类对象参数的标准方式是按引用传递。
对于修改调用函数中数据的函数:
(1)如果数据对象是内置数据类型,则使用指针。如果看到诸如fixit(&x)这样的代码(其中x是int),则很明显,该函数将修改x。
(2)如果数据对象是数组,则只能使用指针。
(3)如果数据对象是结构,则使用指针或引用。
(4)如果数据类型是类对象,则使用引用。
应用一:用于内置类型int
实现数据交换的功能。void swapr(int & a, int & b) // use references{ int temp; temp = a; // use a, b for values of variables a = b; b = temp;}void swapp(int * p, int * q) // 使用指针同样可以完成{ int temp; temp = *p; // use *p, *q for values of variables *p = *q; *q = temp;}引用的调用为:swap(x,y);指针的调用为:swap(&x,&y);应用二:用于结构体对象和类对象
(1)这里要对结构体内部的内容进行修改,只能使用引用参数或者指针参数,不能按值传递。void set_pc(free_throws & ft){ if (ft.attempts != 0) ft.percent = 100.0f *float(ft.made)/float(ft.attempts); else ft.percent = 0;}(2)由于不修改内部的参数,因此函数使用一个const引用参数。注:使用const使函数能够处理const和非const实参,否则将只能接受非const数据。void display(const free_throws & ft){ using std::cout; cout << "Name: " << ft.name << '\n'; cout << " Made: " << ft.made << '\t'; cout << "Attempts: " << ft.attempts << '\t'; cout << "Percent: " << ft.percent << '\n';}(3)如果返回类型被声明为free_throws 而不是free_throws &,上述返回语句将返回target(也就是team)的拷贝。但返回类型为引用,这意味着返回的是最初传递给accumulate()的team对象。效率会更高。free_throws & accumulate(free_throws & target, const free_throws & source){ target.attempts += source.attempts; target.made += source.made; set_pc(target); return target;}
返回引用时需要注意的问题:
应避免返回函数终止时不再存在的内存单元引用。应避免编写下面这样的代码:const free_throws & clone2(free_throws & ft){free_throws newguy; //first step to big errornewguy=ft; //copy inforeturn newguy; //return reference to copy}同样,也应避免返回指向临时变量的指针。返回值为非引用类型或者指针类型的则可以使用上述方法,例如:string version1(const string & s1, const string & s2){ //按值传递也可以,使用引用可以提高效率 string temp; temp = s2 + s1 + s2; return temp;}
0 0
- C++引用变量的使用
- 引用变量.(变量)的使用
- C语言 变量的跨文件引用
- c语言-指针变量的引用
- 【C语言】指针变量的引用
- C变量的直接引用与间接引用区别
- 引用-利用引用交换两个变量的值【C++】
- C++:输入两个整数,将它们按从小到大的顺序输出(使用变量的引用)
- 【C++】引用变量
- 【C++】使用局部变量赋值而非引用,导致内存多次释放的野指针问题
- C/C++中extern的使用,引用另一个文件中的变量
- C++ 类成员引用变量的使用
- C++ 类成员引用变量的使用
- 私有变量的使用:从传值到传引用
- 关于C++引用C,C引用C++,extern的使用
- 使用引用成员变量
- 引用变量使用误区
- C/C++中关于地址、指针和引用变量的学习笔记(十) : 引用型变量
- 简单谈谈JavaScript中的this
- Project Euler 78 : Coin partitions
- 基于贝叶斯方法的垃圾邮件过滤工具
- C 语言高效编程与代码优化
- 全局事务和本地事务
- C++引用变量的使用
- 深入探讨:宏、内联函数与普通函数的区别
- Spring_34_在 WEB 应用中使用 Spring 的基本思路
- 堆和栈的区别(转过无数次的文章)
- 回调函数和普通函数的区别
- 122. Best Time to Buy and Sell Stock II | 股票利润最大化
- J2EE—JAF和JavaMail
- 【codeforces 765C】Table Tennis Game 2
- NIO